今天在项目对接时,对方对一个字符串使用小数点.来作为分隔符,使用String的split(".")方法处理出现了问题,阅读了一下String类的源码,发现了问题所在。
先举个列子看一下这个问题
String str = "xxx.yyy.zzz";
String[] strs = str.split(".");
System.out.println(strs.length);
运行结果 : 0;
来看看一下String源码中这个方法的实现
public String[] split(String regex) {
return split(regex, 0);
}
继续看split(regex, 0)这个两个参数的方法,我们先讨论第一个参数,String regex ,在源码中对这个参数是这样描述的
the delimiting regular expression
意思是分隔正则表达式,说明split分隔符是根据正则表达式匹配的,而不是简单的字符匹配,再来看方法的实现
char ch = 0;
if (((regex.value.length == 1 &&
".$|()[{^?*+\\".indexOf(ch = regex.charAt(0))
== -1) ||
(regex.length() == 2 &&
regex.charAt(0) == '\\' &&