java split 坑_Java坑锦集一 - split函数
split函数
```
String a = "a,a,a,a"; System.out.println(a.split(",").length); //结果为4 String a = "a,,,4"; System.out.println(a.split(",").length); //结果为4 String a = "a,a,,"; System.out.println(a.split(",").length); //结果为2 String a = "a,a,a,"; System.out.println(a.split(",").length); //结果为3 String a = ",a,a,a"; System.out.println(a.split(",").length); //结果为4
```从以上代码可以得出:当后面的逗号都为空的时候,默认是没有的,split函数就不会再进行切割了。
split源码探究
```
public String[] split(CharSequence input [, int limit]) { int index = 0; // 指针 boolean matchLimited = limit > 0; // 是否限制匹配个数
ArrayListmatchList = new ArrayList(); // 匹配结果队列
Matcher m = matcher(input); // 待切割字符(串)匹配对象,pattern去哪了?
// Add segments before each match found
while(m.find()) {
if (!matchLimited || matchList.size() < limit - 1) { // 如果不限制匹配个数 或者 当前结果列表的大小小于limit-1
String match = input.subSequence(index, m.start()).toString(); // 取子串,(指针位置,分隔串所在的首位)
matchList.add(match); // 添加进结果集
index = m.end(); // 移动指针
} else if (matchList.size() == limit - 1) { // last one,即还剩最后一个名额了
String match = input.subSequence(index, input.length()).toString(); // 最后一个元素从指针取到字符串结尾
matchList.add(match);
index = m.end();
}
}
// If no match was found, return this
if (index == 0) // 即没有切分到的意思吧,返回整一串
return new String[] {input.toString()};
// Add remaining segment
if (!matchLimited || matchList.size() < limit) // 如果不限制匹配个数 或者 结果集大小小于限制个数
// 这个时候,后面已无匹配,如__1_1___,取最后一个1的后面部分
matchList.add(input.subSequence(index, input.length()).toString()); // 最后一个元素从指针取到字符串结尾
// Construct result
int resultSize = matchList.size();
if (limit == 0)
while (resultSize > 0 && matchList.get(resultSize-1).equals("")) // 如果结果集最后的元素是"",一个一个地删除它们
resultSize--;
String[] result = new String[resultSize];
return matchList.subList(0, resultSize).toArray(result);
}
```特别地,最后的while循环里,把结果集的位于最后的""元素删除了,有人问过“boo:and:foo”用“o”来分割,为什么结果是{“b”,"",":and:f"},而不是{"b","",":and:f","",""}的原因所在了。
java split 坑_Java坑锦集一 - split函数相关推荐
- java 分布式同步_Java Web分布式集群搭建(三)——Session同步
对于一个业务系统的Tomcat集群来说,必须保证同一个用户访问到任一台服务器上都可以维持之前操作的身份.比如在服务器A进行了登陆,那么在服务器B中也要同步该用户已登录的状态,这里就用到了Session ...
- java图片色差_java – 如何进一步优化这个色差函数?
我已经做了这个功能来计算CIE Lab颜色空间的颜色差异,但它缺乏速度.既然我不是一个 Java专家,我想知道有没有一些技巧可以在这里提高速度呢? 代码基于注释块中提到的matlab函数. /** * ...
- java split 坑_java String split 踩坑记
split操作是出镜率非常高的一个方法, 但是我们使用中通常会使用两个类提供的split方法, 他们在入参类型一样, 但是效果却有一些差别, 稍不注意容易踩坑. java.lang.String#sp ...
- 第91课:SparkStreaming基于Kafka Direct案例实战和内幕源码解密 java.lang.ClassNotFoundException 踩坑解决问题详细内幕版本
第91课:SparkStreaming基于Kafka Direct案例实战和内幕源码解密 /* * *王家林老师授课http://weibo.com/ilovepains */ 每天晚上20: ...
- Java web 开发填坑记 2 -如何正确的创建一个Java Web 项目
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72566261 本文出自[赵彦军的博客] Java web 开发填坑记 1-如何正确 ...
- 2017一季度JAVA面试题锦集
转载自 2017一季度JAVA面试题锦集 1.如何实现分布式事务,你们公司是怎么解决的? 2.HashMap数据结构及实现原理,其链表是用来解决什么问题的 3.可以自定义java.lang.Strin ...
- Java面试进阶:Dubbo、Zookeeper面试题锦集
Dubbo面试题锦集 1.默认也推荐使用netty框架,还有mina. 2.默认是阻塞的,可以异步调用,没有返回值的可以这么做. 3.推荐使用zookeeper注册中心,还有redis等不推荐. 4. ...
- Java中MessageFormat的坑
文章目录 Java中MessageFormat的坑 问题现象 问题排查 如何解决 Java中MessageFormat的坑 问题现象 某个业务功能需要通过SSH协议执行命令查询一些数据,而某次查询居然 ...
- 阿里巴巴Java面试题锦集
1.微信红包怎么实现. 2.海量数据分析. 3.测试职位问的线程安全和非线程安全. 4.HTTP2.0.thrift. 5.面试电话沟通可能先让自我介绍. 6.分布式事务一致性. 7.nio的底层实现 ...
最新文章
- QIIME 2教程. 25可用和开发中插件AvailableFuturePlugins(2021.2)
- mysql jdbc tomcat_Tomcat+MySql+jdbc
- 智能路由器操作系统OpenWrt
- redhat系统双网卡绑定
- NHibernate与EF(Entity Framework)的区别
- 异常:java.lang.NoClassDefFoundError: org/springframework/expression/ParserContext
- hdu 2082 找单词(母函数)
- 魔术方法 python_python所有的魔术方法
- 泡沫股价、外卖小哥要失业了?测试员还要不要进美团?一文带你了解背后真相
- 双目测距(六)--三维重建及UI显示
- 利用FastFds搭建文件管理系统(一)
- 移动硬盘打不开(不用格式化)修复方法
- boy模拟器 my_myboy模拟器中文下载
- 负熵作为非高斯的度量
- 黑苹果html5,黑苹果配置必备神器 Clover Configurator v5.10.0.0 官方中文原版
- [译] linux内存管理之RSS和VSZ的区别
- 数据结构李春葆第五版答案
- 【原创】【理论+题型】二次型化标准型 +合同
- K均值聚类算法(Kmeans)讲解及源码实现
- 微型计算机原理及应用第二版课后答案李伯成,李伯成《微型计算机原理及应用+》完整课后习题答案.doc...