Skip to content Skip to sidebar Skip to footer

When Processing A Csv String With An Empty Final Field, Mystring.split( "," ) Returns Incorrect Number Of Array Entries

I'm processing a certain line read from a .csv file using String.split(',') and finding that the final empty string after the last delimiter is not making it into the array created

Solution 1:

Figured it out as I was entering the question! Use stringObj.split( ",", numDelimitersExpected ) or, as @Supericy pointed out, stringObj.split( ",", -1 ).

According to the Android docs about stringObj.split( delimiter ) a call to line.split( "," ) is equivalent to a call to line.split( ",", 0 ) with the second argument referring to limit, which sets the 'maximum number of entries' and defines the 'treatment of trailing empty strings' . Looking at the documentation for stringObj.split( delimiter ) it states that with limit == 0 'trailing empty strings will not be returned'.

The solution is to use a call to split( ",", limit ) with limit set to the number of array entries you expect to get back. In my case a limit set to 5 returns the array

values[0] : '1'values[1] : 'Some Value'values[2] : '31337'values[3] : 'Another Value'values[4] : ''

which is exactly what I wanted. Problem solved.

In fact, even if your toSplit string has less delimiters than limit, a call with a set limit will still create empty array entries up to limit. For example, with the same input string as in my question:

StringtoSplit="1,Some Value,31337,Another Value,"

a call String values[] = toSplit.split( ",", 8 ) returns the array

values[0] : '1'values[1] : 'Some Value'values[2] : '31337'values[3] : 'Another Value'values[4] : ''values[5] : ''values[6] : ''values[7] : ''

Neat!

Note: Oracle's Java String.split( delimiter ) has the same functionality with the Android docs winning for their more concise explanation. (:

Edit: As @Supericy added, toSplit.split( ",", -1 ) would also properly return the trailing empty entry. Thanks for the addition!

Post a Comment for "When Processing A Csv String With An Empty Final Field, Mystring.split( "," ) Returns Incorrect Number Of Array Entries"