java中split的坑,用的时候一定要小心
2015-12-07 13:19
495 查看
有的时候总觉得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");
相关文章推荐
- java中不同循环的系能比较
- 第二章 Spring Security起步
- java int与byte【】之间的转换
- SpringMVC_RESTful简易笔记
- Java 8十个lambda表达式案例
- mysq连接 mysql-connector-java-5.1.34.jar
- SpringMVC整合Swagger框架
- 在Eclipse 中,选择一个变量名,其他相同变量名都高亮阴影显示 的设置
- java中while的用法
- 简单谈谈Java中String类型的参数传递问题
- java实现图片与base64字符串之间的转换
- Java关键字final、static使用总结 - 熔 岩 - 51CTO技术博客
- java socket编程之聊天室(一)
- Spring mvc 实例 --JSTL结合EL实现JSP获取后台List回显界面
- JAVA线程池学习以及队列拒绝策略
- 【leetcode】Peeking Iterator
- 【工具】线程安全的JdbcTemplate.java
- JAVA反射常用方法
- Spring+SpringMVC+Mybatis 利用AOP自定义注解实现可配置日志快照记录
- 关于Spring报指针异常的问题的解决方案