Splitting a Java String by the pipe symbol using split("|")
java, regex, string
Solution
You need
test.split("\\|");
`split` uses regular expression and in regex `|` is a metacharacter representing the `OR` operator. You need to escape that character using `\` (written in String as `"\\"` since `\` is also a metacharacter in String literals and require another `\` to escape it).
You can also use
test.split(Pattern.quote("|"));
and let `Pattern.quote` create the escaped version of the regex representing `|`.
Problem
The Java official documentation states: The string `"boo:and:foo"`, for example, yields the following results with these expressions Regex Result : ``` { "boo", "and", "foo" }" ``` And that's the way I need it to work. However, if I run this: ``` public static void main(String[] args){ String test = "A|B|C||D"; String[] result = test.split("|"); for(String s : result){ System.out.println(">"+s+"<"); } } ``` it prints: ``` >< >A< >|< >B< >|< >C< >|< >|< >D< ``` Which is far from what I would expect: ``` >A< >B< >C< >< >D< ``` Why is this happening?