Quick example:
public class Test {
public static void main(String[] args) {
String str = " a b";
String[] arr = str.split("\\s+");
for (String s : arr)
System.out.println(s);
}
}
I want the array arr to contain 2 elements: "a" and "b", but in the result there are 3 elements: "" (empty string), "a" and "b". What should I do to get it right?
Instead of trimming, you could just add an if to check if a string is empty or not.
The other way to trim it is to use look ahead and look behind to be sure that the whitespace is sandwiched between two non-white-space characters,... something like:
The problem with this is that it doesn't trim the leading spaces, giving this result:
but nor should it as
String#split(...)
is for splitting, not trimming.Kind of a cheat, but replace:
with
The simple solution is to use
trim()
to remove leading (and trailing) whitespace before thesplit(...)
call.You can't do this with just
split(...)
. The split regex is matching string separators; i.e. there will necessarily be a substring (possibly empty) before and after each matched separator.You can deal with the case where the whitespace is at the end by using
split(..., 0)
. This discards any trailing empty strings. However, there is no equivalent form ofsplit
for discarding leading empty strings.