Как новичок, мой ответ был бы:
String number = String.valueOf(ScannerObjectName.nextInt());
int[] digits = new int[number.length()];
for (int i = 0 ; i < number.length() ; i++)
int[i] = Integer.parseInt(digits.substring(i,i+1))
Теперь все цифры содержатся в массиве "цифр".
Как насчет этого?
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[]{});
}
Для этого вы воспользуетесь оператором %
(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());
}
Преобразовать его в 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();
Integer.toString(1100) выдает целое число в виде строки. Integer.toString(1100).getBytes() для получения массива байтов отдельных цифр.
Edit:
Вы можете преобразовать символьные цифры в числовые, таким образом:
String string = Integer.toString(1234);
int[] digits = new int[string.length()];
for(int i = 0; i<string.length(); ++i){
digits[i] = Integer.parseInt(string.substring(i, i+1));
}
System.out.println("digits:" + Arrays.toString(digits));