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