user1112259
user1112259

Reputation:

Array out of bound exception while splitting the String

While splitting the String using ',' I am getting Array out of bound exception. Please find below the program.

public static void main(String[] args) {
    String c="1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
    System.out.println(c.split(",")[11]);
}

Even the 11th element is null i want to print the null string (Because in some records the 11th element is not null). Kindly help me to debug the error.

Upvotes: 1

Views: 2780

Answers (9)

Santosh
Santosh

Reputation: 2323

Try this one!

String c="1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
System.out.println(c.split(",",-1)[11]);

Upvotes: 1

Harshit Gupta
Harshit Gupta

Reputation: 739

try this will help you.

String c="1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
System.out.println(c.split(",",-1)[11]);

Upvotes: 1

ToYonos
ToYonos

Reputation: 16833

According to split documentation :

This method works as if by invoking the two-argument split method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.

This is validated by the source code of the method split in java.util.regex.Pattern, used by the split of String

if (limit == 0)
    while (resultSize > 0 && matchList.get(resultSize-1).equals(""))
        resultSize--;

The actual size of your array is 9

Upvotes: 0

Thomas
Thomas

Reputation: 508

Hope the below code helps

public static void main(String[] args) {
    String cvsSplitBy =",(?=([^\"]*\"[^\"]*\")*[^\"]*$)";
    String c="1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
    String sTemp[] = c.split(cvsSplitBy);
    for(int i=0;i<sTemp.length;i++){
        if(((String) c.split(cvsSplitBy)[i])!=null && (!"".equals((String) c.split(cvsSplitBy)[i].trim())))
    System.out.println((String) c.split(cvsSplitBy)[i]);
    }

Output for above code

1
10k ABC D
XYZ AB
12345

Upvotes: 0

Hashini Senaratne
Hashini Senaratne

Reputation: 11

If Java split method is applied without any argument, it discards trailing null elements. So if you debug while assigning the resulted values to an array as follows you will notice that there are only 9 elements in the resulted array which ends with element "12345".

String[] arr = c.split(",");

You can pass a limit parameter as follows (If limit parameter is non-positive then the pattern will be applied as many times as possible and the array can have any length), so that the split method will return an array with trailing null elements.

public static void main(String[] args) {
   String c="1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
   System.out.println(c.split(",", -1)[11]);
}

Upvotes: 0

Łukasz Dembiński
Łukasz Dembiński

Reputation: 406

Take a look at split method description in String class:

This method works as if by invoking the two-argument method with the given expression and a limit argument of zero. Trailing empty strings are therefore not included in the resulting array.

So, split get rid of trailing empty strings from the array. In your example, the resulting array is:

'1'
'10k ABC D'
' XYZ AB'
''
''
''
''
''
'12345'

If you would split following string (with a space before last comma):

"1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,, ,"

the resulting array would be:

'1'
'10k ABC D'
' XYZ AB'
''
''
''
''
''
'12345'
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
''
' '

Upvotes: 2

Razib
Razib

Reputation: 11153

Suppose after splitting the generated array is splittedArray and it will be like this -

String splittedArray = {"1","10k ABC D", "XYZ" "AB","", "" "","","12345"};

You can see there is not element at splittedArray[11]. The size of the splittedArray is 9. If you fix the index 11 like this then no error will be occurred -

String c="1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
System.out.println(c.split(",")[8]);

Output:
12345

Upvotes: 0

DMagro
DMagro

Reputation: 7

The Result of c.split(",") is a String array with 9 elements. You can view this if you use this code:

String c="1,10k ABC D, XYZ AB,,,,,,12345,,,,,,,,,,,,,,,,,,,,,,,,,,,,,";
    String[] s = c.split(",");

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

If you want everything besides the ',' char you have to use ",+" instead of "," in the split. This regular expression 4 results and what it does is ignoring all the ','.

Upvotes: 0

Tagir Valeev
Tagir Valeev

Reputation: 100149

Probably you want

c.split(",", -1);

This will keep empty strings at the end.

Upvotes: 3

Related Questions