使用String.split()时入参为正则表达式元字符怎么处理

问题
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
今天又再次遇到了类似问题,还是分隔符分割字符串问题。这次用的分隔符是“|”。总所周知,该字符也是正则表达式中的特殊字符。使用该字符对字符串进行分割时,得到的结果是每个字符作为一个元素的数组。具体的原因需要结合正则表达式的语义,这里认为没有必要具体分析该结果的产生原因了。只要记住每次遇到类似情况,都进行一下转义"\|",就好了。

关注公众号,第一时间接收我更多文章
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值