When Processing A Csv String With An Empty Final Field, Mystring.split( "," ) Returns Incorrect Number Of Array Entries
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"