Java 字符串分割“|”与“.”Bug(切记)
2016-04-27 23:41
507 查看
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 '/' characters.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.解决办法:
将 “|” 及 “.” 前面添加转意符号,即更改为 “\\|” 和 “\\.”。
相关文章推荐
- hibernate reverse engineering 中没有可选的java src folder
- java开发环境的配置
- Spring学习笔记4-AOP
- Myeclipse Hibernate 方向工程生成映射文件出现 Generating Artifacts 问题
- 平衡二叉树-Java
- DropWizard:用Java轻轻的写一个RESTful Service
- java--集合
- Java语言中没有引用传递,只有值传递。到底对不对?
- java文件读写操作大全
- Spring之单例类创建实例
- spring框架学习笔记(九)
- Java类加载器深入理解
- Java ArrayList 的不同排序方法
- java.util.regex.PatternSyntaxException: Unclosed character class near index解决办法
- java 基础一
- SpringMVC注解@initbinder解决类型转换问题
- RxJava Single&Subjects
- java编写简易扑克牌游戏
- 抽象类和接口
- 关于read与readLine方法的差别,留给初学java的童鞋的,周六会更新详细解析