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

123
задан jjnguy 2 August 2010 в 16:00
поделиться

5 ответов

Как новичок, мой ответ был бы:

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))

Теперь все цифры содержатся в массиве "цифр".

0
ответ дан 24 November 2019 в 01:12
поделиться

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

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[]{});
}
26
ответ дан 24 November 2019 в 01:12
поделиться

Для этого вы воспользуетесь оператором % (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());
}
177
ответ дан 24 November 2019 в 01:12
поделиться

Преобразовать его в 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();
70
ответ дан 24 November 2019 в 01:12
поделиться

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));
0
ответ дан 24 November 2019 в 01:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: