Why does String.split need pipe delimiter to be escaped?
I am trying to parse a file that has each line with pipe delimited values. It did not work correctly when I did not escape the pipe delimiter in split method, but it worked correctly after I escaped the pipe as below.
private ArrayList<String> parseLine(String line) {
ArrayList<String> list = new ArrayList<String>();
String[] list_str = line.split("\\|"); // note the escape "\\" here
System.out.println(list_str.length);
System.out.println(line);
for(String s:list_str) {
list.add(s);
System.out.print(s+ "|");
}
return list;
}
Can someone please explain why the pipe character needs to be escaped for the split()
method?
Solution 1:
String.split
expects a regular expression argument. An unescaped |
is parsed as a regex meaning "empty string or empty string," which isn't what you mean.
Solution 2:
Because the syntax for that parameter to split is a regular expression, where in the '|'
has a special meaning of OR, and a '\|'
means a literal '|'
so the string "\\|"
means the regular expression '\|'
which means match exactly the character '|'
.
Solution 3:
You can simply do this:
String[] arrayString = yourString.split("\\|");