问题
Java中的String类有一个方法是split,可以根据指定分割符号,将源字符串分割为一个字符串数组。
今天需要将一个字符串以英文"."分割,便使用到了这个方法。一开始是这么写的:
String origin = "abc.bcd";
String[] arr = origin.split("."); //结果:arr为长度为0数组
找线索
遇到这个问题感觉比较奇怪,之前明明用过这个方法没什么问题呀。怀着疑问我又做了以下测试:
String origin = "abc,bcd";
String[] arr = origin.split(","); //结果:arr为长度为2数组,{"abc","bcd"}
只是换了个分隔符就可以正常工作了??
获得答案
到了这一步我便去看了下Jdk文档,发现传入的这个参数是作为正则表达式的。这就马上清楚了,因为.是正则表达式中的元字符,而我这里是把它作为普通字符使用的。而实际传入split后,.被当做元字符处理了,含义也就变了。
解决办法
加入转义,将.作为普通字符串处理
String origin = "abc.bcd";
String[] arr = origin.split("\\.");
扩展:元字符.在正则表达式中的含义及一开始产生错误结果的原因
在正则表达式规则中.匹配除换行以外的任意字符。
所以在split执行时,发现字符串中的每一个字符都是分隔符,所以分割的后的数组是个空数组。因为结果数组中的字符是不包含分隔符的。
补充
2019.09.23
今天又再次遇到了类似问题,还是分隔符分割字符串问题。这次用的分隔符是“|”。总所周知,该字符也是正则表达式中的特殊字符。使用该字符对字符串进行分割时,得到的结果是每个字符作为一个元素的数组。具体的原因需要结合正则表达式的语义,这里认为没有必要具体分析该结果的产生原因了。只要记住每次遇到类似情况,都进行一下转义"\|",就好了。
关注公众号,第一时间接收我更多文章