views:

97

answers:

3

When I split the string "1|2|3|4" using the String.split("|") I get 8 elements in the array instead of 4. If I use "\\|" the result is proper. I am guessing this has something todo with regular expressions. Can anybody explain this?

+5  A: 

You're right. | is a special character for alternation. The regular expression | means "an empty string or an empty string". So it will split around all empty strings, resulting 1 element for each character in the string. Escaping it \| make it a normal character.

KennyTM
why should I tell you my name
@why: No it's not. See http://download-llnw.oracle.com/javase/6/docs/api/java/util/regex/Pattern.html. You could use `\Q...\E` to make sure the `...` won't be interpreted as special characters.
KennyTM
@why should I tell you my name: http://www.regular-expressions.info/reference.html
ColinD
+1  A: 

| is OR in Java regular expression syntax, basically splitting 1|2|3|4 with | is equal to telling String#split() to "split this string between empty OR empty) which means it splits after every character you have in the original string.

Esko
+1  A: 

If you want to split a string without using a regex, I'd recommend the Splitter class from Guava. It can split on fixed strings, regexes and more.

Iterable<String> split = Splitter.on('|').split("1|2|3|4");
ColinD