Java 字符串分割“|”与“.”Bug(切记)

1. 背景:

使用Java编程时对于字符串的分割常常会使用到 “|” “.”
目前更多的developer并没有查看源码的习惯,因此对java.lang.String.split(String)方法的理解,只是停留在知道是依据参数对原字符串进行分割,但并不了解分割的实现原理,因此会导致不会意识到这里产生的Bug。

2. 实例:

s.replaceAll(".", "/") will return a String in which every character has been replaced by a '/' character
s.split(".") always returns a zero length array of String
"ab|cd".replaceAll("|", "/") will return "/a/b/|/c/d/"
"ab|cd".split("|") will return array with six (!) elements: [, a, b, |, c, d]


3. 产生原理:

public String[] split(String regex) {
    return split(regex, 0);
}
上面是String类中split方法的源码,参数名为regex,看到这里大家应该了解到我们传进用来分割的参数实际上是一个正则表达式,而Java会使用正则来分割原有字符串。而 “|” 和 “.”是正则表达式的符号,即在正则中他们不是表达的字面本意,结果自然就不是预期想象的分割后的字符串数组了。


4.解决办法:

将 “|” 及 “.” 前面添加转意符号,即更改为 “\\|” 和 “\\.”。

你可能感兴趣的:(Java)