关于Spring.split()踩坑
public static void main(String[] args) {
String selectedApprover ="JDXT_ouyangG|T欧阳小枝G|T18288883333";
System.out.println(Arrays.toString(selectedApprover.split("G|T")));
}
运行结果为:
[JDX, _ouyang, |, 欧阳小枝, |, 18288883333]
分析原因:
最初出现是在生成环境上,非常奇怪,百思不得其解,难道是按照“G”,“|”,“T”;三个来分割了?
验证结果:
public static void main(String[] args) {
String selectedApprover ="JDXT_ouGyangGxiaoTzhiG|T欧阳小枝G|T18288883333";
System.out.println(Arrays.toString(selectedApprover.split("G|T")));
}
[JDX, _ou, yang, xiao, zhi, |, 欧阳小枝, |, 18288883333]
一看这个结果,果然是!按照字母来说,一般不会有问题,那有问题的只可能是是“|”,猜测是不是按照了正则,那么转义下看看
public static void main(String[] args) {
String selectedApprover ="JDXT_ouGyangGxiaoTzhiG|T欧阳小枝G|T18288883333";
System.out.println(Arrays.toString(selectedApprover.split("G|T")));
}
[JDXT_ouGyangGxiaoTzhi, 欧阳小枝, 18288883333]
预期结果,没有问题,最后在Javadoc里找到了这个方法的说明
因此,特殊字符慎用,附带百度的部分内容:
String.split方法(以及其它类似的需要使用正则表达式的场合)
常见的需要回避“找抽”的字符有: , \ | ^ * + ? ( ) { } [ ] 等等
如果实在想用的话,在split之类需要正则表达式的地方,必须采用转义:
\\ = 转义后的 \ (可用在split中) (这个最无耻)
\. = 转义后的 . (可用在split中)
\, = 转义后的 , (可用在split中)
\| = 转义后的 | (可用在split中)
\^ = 转义后的 ^ (可用在split中)
\* = 转义后的 * (可用在split中)