Как получить отдельные цифры номера 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

Ответ 5

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

int[] intTab = String.valueOf(number).chars().map(Character::getNumericValue).toArray();

Чтобы быть ясным: Вы используете String.valueOf(number) для преобразования int в String, затем chars() метод для получения IntStream (каждый char из вашей строки теперь является номером Ascii), тогда вам нужно запустить метод map(), чтобы получить числовые значения номер Ascii. В конце вы используете метод toArray() для изменения потока в массив int [].

Ответ 6

Я вижу, все ответы уродливы и не очень чисты.

Я предлагаю вам использовать рекурсию, чтобы решить свою проблему. Этот пост очень старый, но может пригодиться будущим программистам.

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

Выход:

Input: 12345

Output: 1   2   3   4   5 

Ответ 7

// could be any num this is a randomly generated one
int num = (int) (Math.random() * 1000);

// this will return each number to a int variable
int num1 = num % 10;
int num2 = num / 10 % 10;
int num3 = num /100 % 10;

// you could continue this pattern for 4,5,6 digit numbers
// dont need to print you could then use the new int values man other ways
System.out.print(num1);
System.out.print("\n" + num2);
System.out.print("\n" + num3);

Ответ 8

Проще говоря, я должен преобразовать число в строку и использовать substring для извлечения, а затем преобразовать в целое число.

Что-то вроде этого:

int digits1 =Integer.parseInt( String.valueOf(201432014).substring(0,4));
    System.out.println("digits are: "+digits1);

выход 2014

Ответ 9

Я написал программу, которая демонстрирует, как отделять цифры целого, используя более простой и понятный подход, который не включает в себя массивы, рекурсии и все эти фантазии schmancy. Вот мой код:

int year = sc.nextInt(), temp = year, count = 0;

while (temp>0)
{
  count++;
  temp = temp / 10;
}

double num = Math.pow(10, count-1);
int i = (int)num;

for (;i>0;i/=10)
{
  System.out.println(year/i%10);
}

Предположим, что ваш ввод является целым числом 123, итоговый результат будет следующим:

1
2
3

Ответ 10

Вот мой ответ, я сделал это для себя, и я надеюсь, что это достаточно просто для тех, кто не хочет использовать подход String или нуждается в более математическом решении:

public static void reverseNumber2(int number) {

    int residual=0;
    residual=number%10;
    System.out.println(residual);

    while (residual!=number)  {
          number=(number-residual)/10;
          residual=number%10;
          System.out.println(residual);
    }
}

Итак, я просто получаю единицы, распечатываю их, вычеркиваю их из числа, а затем деляю это число на 10 - это всегда без каких-либо плавающих вещей, так как единицы ушли, повторяются.

Ответ 11

Решение Java 8 для получения цифр как int [] из целого числа, которое у вас есть как String:

int[] digits = intAsString.chars().map(i -> i - '0').toArray();

Ответ 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));

Ответ 13

Это использует метод modulo 10 для определения каждой цифры в количестве, превышающем 0, тогда это изменит порядок массива. Предполагается, что вы не используете "0" в качестве стартовой цифры.

Это изменено для ввода пользовательского ввода. Этот массив изначально вставлен назад, поэтому мне пришлось использовать вызов Collections.reverse(), чтобы вернуть его в пользовательский порядок.

    Scanner scanNumber = new Scanner(System.in);
    int userNum = scanNumber.nextInt(); // user number

    // divides each digit into its own element within an array
    List<Integer> checkUserNum = new ArrayList<Integer>();
    while(userNum > 0) {
        checkUserNum.add(userNum % 10);
        userNum /= 10;
    }

    Collections.reverse(checkUserNum); // reverses the order of the array

    System.out.print(checkUserNum);

Ответ 14

int number = 12344444; // or it Could be any valid number

int temp = 0;
int divider = 1;

for(int i =1; i< String.valueOf(number).length();i++)
 {

    divider = divider * 10;

}

while (divider >0) {

    temp = number / divider;
    number = number % divider;
    System.out.print(temp +" ");
    divider = divider/10;
}

Ответ 15

Просто для того, чтобы опираться на эту тему, здесь, как подтвердить, что число является палиндромным целым в Java:

public static boolean isPalindrome(int input) {
List<Integer> intArr = new ArrayList();
int procInt = input;

int i = 0;
while(procInt > 0) {
    intArr.add(procInt%10);
    procInt = procInt/10;
    i++;
}

int y = 0;
int tmp = 0;
int count = 0;
for(int j:intArr) {
    if(j == 0 && count == 0) {
    break;
    }

    tmp = j + (tmp*10);
    count++;
}

if(input != tmp)
    return false;

return true;
}

Я уверен, что я могу упростить этот алгот дальше. Но я здесь. И он работал во всех моих тестовых случаях.

Я надеюсь, что это поможет кому-то.

Ответ 16

Попробуйте следующее:

int num= 4321
int first  =  num % 10;
int second =  ( num - first ) % 100 / 10;
int third  =  ( num - first - second ) % 1000 / 100;
int fourth =  ( num - first - second - third ) % 10000 / 1000;

Вы получите first = 1, second = 2, third = 3 и 4th = 4....

Ответ 17

public int[] getDigitsOfANumber(int number) {
    String numStr = String.valueOf(number);
    int retArr[] = new int[numStr.length()];

    for (int i = 0; i < numStr.length(); i++) {
        char c = numStr.charAt(i);
        int digit = c;
        int zero = (char) '0';
        retArr[i] = digit - zero;

    }
    return retArr;
}

Ответ 18

см. ниже мое предложение с комментариями

          int size=i.toString().length(); // the length of the integer (i) we need to split;
           ArrayList<Integer> li = new ArrayList<Integer>(); // an ArrayList in whcih to store the resulting digits

        Boolean b=true; // control variable for the loop in which we will reatrive step by step the digits
        String number="1"; // here we will add the leading zero depending on the size of i
        int temp;  // the resulting digit will be kept by this temp variable

    for (int j=0; j<size; j++){
                        number=number.concat("0");
                    }

Integer multi = Integer.valueOf(number); // the variable used for dividing step by step the number we received 
                while(b){

                    multi=multi/10;
                    temp=i/(multi);
                    li.add(temp);
                    i=i%(multi);
                                        if(i==0){
                                        b=false;
                                        }


                }

                for(Integer in: li){
                    System.out.print(in.intValue()+ " ");
                }

Ответ 19

Так как я не вижу метода по этому вопросу, который использует Java 8, я буду использовать это. Предполагая, что вы начинаете с String и хотите получить List<Integer>, тогда вы можете передавать такие элементы.

List<Integer> digits = digitsInString.chars().map(Character::getNumericValue)
                            .collect(Collectors.toList());

Это получает символы в String как IntStream, сопоставляет эти целые представления символов с числовым значением и затем собирает их в список.

Ответ 20

Что-то вроде этого вернет char[]:

public static char[] getTheDigits(int value){
    String str = "";
    int number = value;
    int digit = 0;
    while(number>0){
        digit = number%10;
        str = str + digit;
        System.out.println("Digit:" + digit);
        number = number/10;     

    }
    return str.toCharArray();
}

Ответ 21

ни chars(), ни codePoints() - другая лямбда

String number = Integer.toString( 1100 );

IntStream.range( 0, number.length() ).map( i -> Character.digit( number.codePointAt( i ), 10 ) ).toArray();  // [1, 1, 0, 0]

Ответ 22

Как нуб, мой ответ будет:

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

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

Ответ 23

Я думаю, что это будет самый полезный способ получить цифры:

public int[] getDigitsOf(int num)
{        
    int digitCount = Integer.toString(num).length();

    if (num < 0) 
        digitCount--;           

    int[] result = new int[digitCount];

    while (digitCount-- >0) {
        result[digitCount] = num % 10;
        num /= 10;
    }        
    return result;
}

Затем вы можете получить цифры простым способом:

int number = 12345;
int[] digits = getDigitsOf(number);

for (int i = 0; i < digits.length; i++) {
    System.out.println(digits[i]);
}

или более просто:

int number = 12345;
for (int i = 0; i < getDigitsOf(number).length; i++) {
    System.out.println(  getDigitsOf(number)[i]  );
}

Обратите внимание, что последний метод вызывает метод getDigitsOf слишком много времени. Так что это будет медленнее. Вы должны создать массив int, а затем вызвать метод getDigitsOf один раз, как во втором блоке кода.

В следующем коде вы можете вернуться к процессу. Этот код помещает все цифры вместе, чтобы сделать число:

public int digitsToInt(int[] digits)
{
    int digitCount = digits.length;
    int result = 0;

    for (int i = 0; i < digitCount; i++) {
        result = result * 10;
        result += digits[i];
    }

    return result;
}

Оба метода, которые я предоставил, также работают для отрицательных чисел.

Ответ 24

import java.util.Scanner;

class  Test 
{  
    public static void main(String[] args)   
    {  
        Scanner sc = new Scanner(System.in); 


    int num=sc.nextInt(); 
    System.out.println("Enter a number (-1 to end):"+num);
    int result=0;
    int i=0;
    while(true) 
    { 
      int n=num%10;
      if(n==-1){
        break;
      }
      i++;
      System.out.println("Digit"+i+" = "+n);
      result=result*10+n;
      num=num/10; 


      if(num==0) 
      { 
        break; 
      } 
    }
    }
}

Ответ 25

в Java, так вы можете отделять цифры от чисел и хранить их в массиве.

public static void main(String[] args) {
        System.out.println("Digits Array:: "+Arrays.toString(getNumberArr(1100)));
}

private static Integer[] getNumberArr(int number) {
    //will get the total number of digits in the number
    int temp = number;
    int counter = 0;

    while (temp > 0) {
        temp /= 10;
        counter++;
    }
    //reset the temp
    temp = number;

    // make an array
    int modulo;     //modulo is equivalent to single digit of the number.
    Integer[] numberArr = new Integer[counter];
    for (int i = counter - 1; i >= 0; i--) {
        modulo = temp % 10;
        numberArr[i] = modulo;  
        temp /= 10;
    }

    return numberArr;
}

Вывод:

Digits Array:: [1, 1, 0, 0]

Ответ 26

import java.util.Scanner;

public class SeparatingDigits {

    public static void main( String[] args )
    {

        System.out.print( "Enter the digit to print separately :- ");
        Scanner scan = new Scanner( System.in );

        int element1 = scan.nextInt();
        int divider;

        if( ( element1 > 9999 ) && ( element1 <= 99999 ) )
        {
            divider = 10000;
        }
        else if( ( element1 > 999 ) && ( element1 <= 9999 ) )
        {
            divider = 1000;
        }
        else if ( ( element1 > 99) && ( element1 <= 999 ) )
        {
            divider = 100;
        }
        else if( ( element1 > 9 ) && ( element1 <= 99 ) )
        {
            divider = 10;
        }
        else 
        {
            divider = 1;
        }

        quotientFinder( element1, divider );




    }

     public static void quotientFinder( int elementValue, int dividerValue )
     {
         for( int count = 1;  dividerValue != 0; count++)
         {
            int quotientValue = elementValue / dividerValue ;
            elementValue = elementValue % dividerValue ;
            System.out.printf( "%d  ", quotientValue );

            dividerValue /= 10;

         }
     }
    }

Без использования массивов и строк. (цифры 1-99999)

вывод:

Введите цифру для печати отдельно: - 12345

1 2 3 4 5