How to get the separate digits of an int number? How to get the separate digits of an int number? java java

How to get the separate digits of an int number?


To do this, you will use the % (mod) operator.

int number; // = some intwhile (number > 0) {    print( number % 10);    number = number / 10;}

The mod operator will give you the remainder of doing int division on a number.

So,

10012 % 10 = 2

Because:

10012 / 10 = 1001, remainder 2

Note: As Paul noted, this will give you the numbers in reverse order. You will need to push them onto a stack and pop them off in reverse order.

Code to print the numbers in the correct order:

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


Convert it to String and use String#toCharArray() or String#split().

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

In case you're already on Java 8 and you happen to want to do some aggregate operations on it afterwards, consider using String#chars() to get an IntStream out of it.

IntStream chars = number.chars();


How about this?

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

or instead of printing to the console, we can collect it in an array of integers and then print the array:

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

If you would like to maintain the order of the digits from least significant (index[0]) to most significant (index[n]), the following updated getDigits() is what you need:

/** * 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[]{});}