java中split的坑,用的时候一定要小心
2016-03-08 00:00
302 查看
有的时候总觉得split很好用,屡试不爽,但他偶尔也会给你一点小惊喜。
1.一些特殊业务场景,对自己拼接出来的字符串使用split分割,假设我们已经知道了这个长度,也许我们会这么写。
2.使用字符作为分隔符
1.一些特殊业务场景,对自己拼接出来的字符串使用split分割,假设我们已经知道了这个长度,也许我们会这么写。
String ids = "1,2,3,"; // 对,你没有看错,我故意这么写的,根据我们的设想这里一定是四个值拼接的,即时有空字符串,使用split神器也可以成功分割出长度为4的数组。 // 所以我这么写了。 String[] idArr = ids.split(","); String idA = idArr[0]; String idB = idArr[1]; String idC = idArr[2]; String idD = idArr[3]; // 好的...你突然发现挂了,抛出数组下标越界了。 // 新手,或者不常用split的人总是会认为idArr的长度应该是4,实际上他只有3。是的这就是java中的split,因为你在别的地方用过的split不是这样的,比如javascript中的split,如果是这个例子的话,那么毫无疑问他的长度是4,最后一个为""空字符串。 // 实际上java的split有一个重载方法,是两个参数的,ok第二个参数就是你期望数组的长度,当然如果你写100,那么你也不可能得到长度为100的数组在本例当中,他是个limit的概念。 String[] idArr = ids.split(",",4); // 这有写长度是4 String[] idArr = ids.split(",",100); // 这有写长度也是4 String[] idArr = ids.split(",",3); // 这有写长度是3 String[] idArr = ids.split(",",2); // 这有写长度是2 // ok看到这里大家应该明白了,所以java的split默认是根据指定的字符去截取,然后末尾如果都是空字符串,那么全部舍去,除非你限定长度。 // 而javascript确实默认没有去处理空字符串的问题。
2.使用字符作为分隔符
"2|33|4".split("|") 出来的结果是: "" 2 | 3 3 | 4 奇怪吧,不过注意看一下API说明还是知道原因的. 所以正常的写法是这样的: ①、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split("."); ②、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|"); “.”和“|”都是转义字符,必须得加"\\"; ③、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");
相关文章推荐
- Git中的AutoCRLF与SafeCRLF换行符问题(及eclipse设置)
- Java小并发下短期任务的线程池
- /.org.eclipse.jdt.core.external.folders/.link0解决方法
- java变量命名规范
- IntelliJ IDEA 14.0 添加及显示 JDK DOC
- java URL中文乱码
- 深入理解Java 虚拟机(周志明)笔记(二)——Java数据分区
- 深入理解Java 虚拟机(周志明)笔记(一)——Java虚拟机发展史
- LeetCode : Merge k Sorted Lists [java]
- Struts2 用 s:if test 判断属性和字符串相等时 注意双引号和单引号的使用 《转》
- 为什么JAVA的垃圾回收机制无法避免内存泄漏
- 7. SpringMVC 数据验证
- Java [Leetcode 144]Binary Tree Preorder Traversal
- 编写web遇到javabean的一个错误
- SpringMVC Controller 介绍
- 修改JAVA_HOME无效,java版本保持不变的问题解决
- java中CAS算法保证原子性 无锁编程
- 【Java】面向对象思想以及类与对象的关系
- eclipse项目遇到红色叹号,该如何解决?
- Maven的安装和Eclipse集成