Вопрос-ответ

How to get the separate digits of an int number?

Как получить отдельные цифры int-числа?

У меня есть такие числа, как 1100, 1002, 1022 и т.д. Я хотел бы иметь отдельные цифры, например, для первого числа 1100 я хочу иметь 1, 1, 0, 0.

Как я могу получить это на Java?

Переведено автоматически
Ответ 1

Для этого вы будете использовать оператор % (mod).

int number; // = some int

while (number > 0) {
print( number % 10);
number = number / 10;
}

Оператор mod предоставит вам остаток от выполнения int-деления числа.

Итак,

10012 % 10 = 2

Потому что:

10012 / 10 = 1001, remainder 2

Примечание: Как отметил Пол, это выдаст вам числа в обратном порядке. Вам нужно будет поместить их в стек и извлекать из него в обратном порядке.

Код для печати чисел в правильном порядке:

int number; // = and int
LinkedList<Integer> stack = new LinkedList<Integer>();
while (number > 0) {
stack.push( number % 10 );
number = number / 10;
}

while (!stack.isEmpty()) {
print(stack.pop());
}
Ответ 2

Преобразуйте его в String и используйте String#toCharArray() или String#split().

String number = String.valueOf(someInt);

char[] digits1 = number.toCharArray();
// or:
String[] digits2 = number.split("(?<=.)");

Если вы уже используете Java 8 и вам захотелось впоследствии выполнить с ней некоторые агрегированные операции, рассмотрите возможность использования String#chars() для получения IntStream результата.

IntStream chars = number.chars();
Ответ 3

Как насчет этого?

public static void printDigits(int num) {
if(num / 10 > 0) {
printDigits(num / 10);
}
System.out.printf("%d ", num % 10);
}

или вместо того, чтобы выводить на консоль, мы можем собрать его в массив целых чисел, а затем распечатать массив:

public static void main(String[] args) {
Integer[] digits = getDigits(12345);
System.out.println(Arrays.toString(digits));
}

public static Integer[] getDigits(int num) {
List<Integer> digits = new ArrayList<Integer>();
collectDigits(num, digits);
return digits.toArray(new Integer[]{});
}

private static void collectDigits(int num, List<Integer> digits) {
if(num / 10 > 0) {
collectDigits(num / 10, digits);
}
digits.add(num % 10);
}

Если вы хотите сохранить порядок цифр от наименее значимых (index[0]) до наиболее значимых (index [n]), вам нужен следующий обновленный getDigits():

/**
* split an integer into its individual digits
* NOTE: digits order is maintained - i.e. Least significant digit is at index[0]
* @param num positive integer
* @return array of digits
*/

public static Integer[] getDigits(int num) {
if (num < 0) { return new Integer[0]; }
List<Integer> digits = new ArrayList<Integer>();
collectDigits(num, digits);
Collections.reverse(digits);
return digits.toArray(new Integer[]{});
}
Ответ 4

Я не видел, чтобы кто-нибудь использовал этот метод, но у меня он сработал, короткий и приятный:

int num = 5542;
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: 5
digit: 5
digit: 4
digit: 2
java