How to Convert a Number to Reversed Array of Digits in Java

The challenge

Given a random non-negative number, you have to return the digits of this number within an array in reverse order.

Test cases

import org.junit.Test; import static org.junit.Assert.assertArrayEquals; public class DigitizeExampleTests { @Test public void tests() { assertArrayEquals(new int[] {1, 3, 2, 5, 3}, ConvertAndReverse.digitize(35231)); } }
Code language: Java (java)

Solution in Java

Option 1 (using Streams and StringBuilder):

import java.util.*; public class ConvertAndReverse { public static int[] digitize(long n) { StringBuilder sb = new StringBuilder(Long.toString(n)).reverse(); return Arrays.stream(sb.toString().split("")) .mapToInt(Integer::parseInt) .toArray(); } }
Code language: Java (java)

Option 2 (using StringBuilder and Streams):

public class ConvertAndReverse { public static int[] digitize(long n) { return new StringBuilder().append(n) .reverse() .chars() .map(Character::getNumericValue) .toArray(); } }
Code language: Java (java)

Option 3 (using Maths):

import java.lang.Math; public class ConvertAndReverse { public static int[] digitize(long n) { String s = String.valueOf(n); int length = s.length(); int[] array = new int[length]; for ( int i = 0; i < length; i++){ array[i] = (int) (s.charAt(length - i - 1)) - 48; } return array; } }
Code language: Java (java)

More test coverage

import org.junit.Test; import static org.junit.Assert.assertArrayEquals; public class DigitizeTests { @Test public void basicTests() { String msg = "Should work with some preset numbers"; assertArrayEquals(msg, new int[] {1,3,2,5,3}, ConvertAndReverse.digitize(35231)); assertArrayEquals(msg, new int[] {7,5,3,2,8,5,3,2}, ConvertAndReverse.digitize(23582357)); assertArrayEquals(msg, new int[] {8,3,7,4,6,7,4,8,9}, ConvertAndReverse.digitize(984764738)); assertArrayEquals(msg, new int[] {0,2,9,3,9,8,2,6,7,5,4}, ConvertAndReverse.digitize(45762893920L)); assertArrayEquals(msg, new int[] {4,9,3,8,3,8,2,0,7,8,4,5}, ConvertAndReverse.digitize(548702838394L)); } @Test public void randomTests() { int i, x; long y; System.out.println("Testing 37 random numbers..."); for (i = x = 1; i <= 37; x = ++i) { y = (long) (10 + Math.ceil((9 * Math.pow(1.7, x) - 10) * Math.random())); assertArrayEquals("Should work with " + y, digitizeAns(y), ConvertAndReverse.digitize(y)); } } private int[] digitizeAns(long n) { String numStr = Long.toString(n); int[] numArr = new int[numStr.length()]; for (int i = numStr.length()-1; i >= 0; i--) { numArr[numStr.length() - 1 - i] = Integer.parseInt(numStr.substring(i, i+1)); } return numArr; } }
Code language: Java (java)
Tags:
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments