Splitting String and put it on int array Splitting String and put it on int array arrays arrays

Splitting String and put it on int array


For input 1,2,3,4,5 the input is of length 9. 9/2 = 4 in integer math, so you're only storing the first four variables, not all 5.

Even if you fixed that, it would break horribly if you passed in an input of 10,11,12,13

It would work (by chance) if you used 1,2,3,4,50 for an input, strangely enough :-)

You would be much better off doing something like this

String[] strArray = input.split(",");int[] intArray = new int[strArray.length];for(int i = 0; i < strArray.length; i++) {    intArray[i] = Integer.parseInt(strArray[i]);}

For future reference, when you get an error, I highly recommend posting it with the code. You might not have someone with a jdk readily available to compile the code to debug it! :)


Java 8 offers a streams-based alternative to manual iteration:

int[] intArray = Arrays.stream(input.split(","))    .mapToInt(Integer::parseInt)    .toArray();

Be prepared to catch NumberFormatException if it's possible for the input to contain character sequences that cannot be converted to an integer.


Let's consider that you have input as "1,2,3,4".

That means the length of the input is 7. So now you write the size = 7/2 = 3.5. But as size is an int, it will be rounded off to 3. In short, you are losing 1 value.

If you rewrite the code as below it should work:

String input;int length, count, size;Scanner keyboard = new Scanner(System.in);input = keyboard.next();length = input.length();String strarray[] = input.split(",");int intarray[] = new int[strarray.length];for (count = 0; count < intarray.length ; count++) {    intarray[count] = Integer.parseInt(strarray[count]);}for (int s : intarray) {    System.out.println(s);}