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

本文揭示了Java中使用特殊字符如“|”和“.”作为分隔符时出现的意外行为,解析了其背后的正则表达式原因,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.解决办法:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值