Извлечение цифр int в Java
Так что если у меня есть введенное целое число:
int num_1 = 128
Как я смогу проанализировать число и получить 1, 2 и 8 и назначить их различным переменным?
спасибо!
13 ответов
неэффективный способ сделать это, чтобы преобразовать целое число в строку и перебирать строку символов.
более эффективным способом было бы что-то вроде:
int n = 128;
while (n > 0) {
int d = n / 10;
int k = n - d * 10;
n = d;
System.out.println(k);
}
ответ, который написал Тило, хорош, но неполон, вы начинаете делать:
char[] digitsAsChars = String.valueOf(num_1).toCharArray();
и затем:
int[] digits = new int[charNums.length];
for(int i=0; i<charNums.length; i++){
digits[i] = charNums[i]-48;//convert char to int
}
Теперь digits
содержит цифры числа в виде массива int
int num = 128;
String number = String.valueOf(num);
for(int i = 0; i < number.length(); i++) {
int j = Character.digit(number.charAt(i), 10);
System.out.println("digit: " + j);
}
выход:
digit: 1
digit: 2
digit: 8
превратить его в строку и перейти символ за символом для цифр:
char[] digits = String.valueOf(num_1).toCharArray();
вот так:
String digits = Integer.toString(num_1);
int digit1 = Character.digit(digits.charAt(0), 10);
int digit2 = Character.digit(digits.charAt(1), 10);
int digit3 = Character.digit(digits.charAt(2), 10);
конечно, если целое число имеет более трех цифр, использование цикла было бы более практичным:
String sDigits = Integer.toString(num_1);
char[] cDigits = sDigits.toCharArray();
int[] digits = new int[cDigits.length];
for (int i = 0; i < cDigits.length; i++)
digits[i] = Character.digit(cDigits[i], 10);
с вышеуказанным кодом на месте, легко извлечь цифры из массива:
int digit1 = digits[0];
int digit2 = digits[1];
int digit3 = digits[2];
соберите все цифры в массиве и используйте futher
import java.lang.Integer;
import java.lang.String;
import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
public class Test
{
public static void main(String[] args) {
Integer num = 12345;
Integer[] digits = getDigits(num.toString());
System.out.println(Arrays.toString(digits));
}
public static Integer[] getDigits(String number) {
List<Integer> digits = new ArrayList<Integer>();
for(int i = 0; i < number.length(); i++) {
int j = Character.digit(number.charAt(i), 10);
digits.add(j);
}
return digits.toArray(new Integer[]{});
}
}
выход должен быть!--3-->
[1, 2, 3, 4, 5]
вот чисто математический способ сделать это:
// Returns digit at pos
static int digitAt(int input, int pos){
int i =(int) (input%(Math.pow(10, pos)));
int j = (int) (i/Math.pow(10, pos-1));
return Math.abs(j); // abs handles negative input
}
например, если input = 1234
и pos = 2
, потом i
is 34
. Мы делим 34
by 10
и округлить, чтобы получить 3
.
не так красиво, но работает!
этот код возвращает nibble по заданному индексу. Если вы хотите получить все цифры, вы можете вызвать этот метод со всеми показателями вашего номера. Он работает не на шестнадцатеричном представлении числа,а на десятичном.
public static int getNibble(int number, int nibbleIndex)
{
int nibble = 0;
while (nibbleIndex >= 0)
{
int division = number / 10;
nibble = number - division * 10;
number = division;
nibbleIndex--;
}
return nibble;
}
теперь, если вы пытаетесь выделить числа в строке среди букв, это должно позаботиться об этом.
String string = "Th1s 1s n0t a number";
int newNum = Integer.parseInt(string.replaceAll("[\D]", ""));
return newNum;
Это должно возвратить 110
кроме того, вот ссылка на обсуждение стека, которое я нашел действительно полезным. получить int из строки, также содержащей буквы, в Java
Если вы не цените идею String
преобразование и хотите повторить, используя нормальный порядок, попробуйте следующее:
int n = 123456789;
int digits = (int) Math.log10(n);
for (int i = (int) Math.pow(10, digits); i > 0; i /= 10) {
System.out.println(n / i);
n %= i;
}
вывод
1
2
3
4
5
6
7
8
9