先看下面的方法,事先预测一下,经过split方法,按逗号进行分割为数组之后,生成的数组的长度是多少,目测很多人都觉得是8,但是结果却出乎意料。是5而不是8.

private static void testSplit() {

String ss = ",aa,bb,cc,dd,,,";

String[] array = ss.split(",");

System.out.println(array.length);//结果是5,而不是预想中的8

for (int i = 0; i < array.length; i++) {

System.out.println(array[i]);

}

}

然后就是正儿八经的运行结果图:

可以看到,结果真的是5而不是我们猜的8,这是为什么呢?

原因解析:

点进去看源码,debug一下,如下图:

可以看到,刚刚开始的时候,确实是有0-7,8个分割出来的东西存在,有三个是空字符串,""。不是null。不用担心空指针异常。

然后 看到下面的继续走,if语句,就看到,他把这个list从尾部开始判断,如果这个list的后面的字符串的长度是0,那么这个resultSize就 减减,然后一直while循环,

直到不符合条件,那么list的下标是5、6、7的值就被抛弃了,然后新生的结果字符串数组,的大小就变成加工过后的长度,那么就变成了长度 5的数组。

list.subList(0, resultSize).toArray(result)

就是这句话啦。

他只是处理后面尾部的空字符串,不处理中间的空字符串和 开头的空字符串。

知道这个原理之后,那么这个 问题以后怎么变,你都了然于胸啦。

下面是又更新的

现在要求字符串

"aa12sas32sasa223sas12as12wqe"//去掉数字,然后弄成数组

"aa,,sas,,sasa,,,,sasas,,,"//去掉逗号,不管几个逗号,都去掉

"aa  sas sa sa     sas  as  "//去掉空格,也不管几个,

把他们给分解成数组,同时刨除掉不用的多余信息。

具体实现代码如下:

private static void testSplitPlus() {

String ss = "aa12sas32sasa223sas12as12wqe";

String[] array = ss.split("[\\d]+");

System.out.println(Arrays.toString(array));

ss = "aa,,sas,,sasa,,,,sasas,,,";

array = ss.split("[,]+");

System.out.println(Arrays.toString(array));

ss = "aa  sas sa sa     sas  as  ";

array = ss.split("[\\s]+");

System.out.println(Arrays.toString(array));

}

下面再看看这个split的源码。

public String[] split(String regex) {

return split(regex, 0);

}

不知道你看到没,那个regex,不就是正则表达式的意思嘛?

那就明白了,这个方法是支持正则表达式操作的。那上面的代码就好解释啦。

第一个[\\d]+这个解释就是\\是转义符,d表示数字,括起来后面的加号表示一个或者多个,那么就可以解释运行结果啦。

第二个[,]解释类似,就是逗号出现一次或多次,

第三个,\\s,就是匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]。

然后下面,看运行结果。

这就是我们要的结果啦。

java split 冒号_Java中字符串split() 的使用方法,没你想的那么简单相关推荐

  1. java 对比函数_java中字符串比较函数和操作函数,详细解析

    java编程语言中关于字符的内容也是极其丰富的,所以学习这方面的知识也十分重要的.今天就来为大家介绍一些与java字符串有关的内容,也就是java中字符串比较函数和操作函数,并为大家进行详细的解析,一 ...

  2. java 随机数生成实现_Java中生成随机数的实现方法总结

    搜索热词 在实际开发工作中经常需要用到随机数.如有些系统中创建用户后会给用户一个随机的初始化密码.这个密码由于是随机的,为此往往只有用户自己知道.他们获取了这个随机密码之后,需要马上去系统中更改.这就 ...

  3. java 文件通配符_Java中泛型通配符的使用方法示例

    本文实例讲述了Java中泛型通配符的使用方法.分享给大家供大家参考,具体如下: 一 点睛 引入通配符可以在泛型实例化时更加灵活地控制,也可以在方法中控制方法的参数. 语法如下: 泛型类名 extend ...

  4. java thread join()_Java中Thread.join()的使用方法

    概要 本文分三个部分对thread.join()进行分析: 1. join() 的示例和作用 2. join() 源码分析 3. 对网上其他分析 join() 的文章提出疑问 1. join() 的示 ...

  5. java 类型转换方法_Java中的实用类型转换的方法

    Java中的实用类型转换的方法 1,              类型转换 JAVA中常用数据类型转换函数 虽然都能在JAVA API中找到,整理一下做个备份. string->byte Byte ...

  6. java对象数组_Java中对象数组的使用方法详解

    本文实例讲述了Java中对象数组的使用方法.分享给大家供大家参考,具体如下: 一 点睛 对象可以用数组来存放,通过下面两个步骤来实现. 1 声明以类为数据类型的数组变量,并用new分配内存空间给数组. ...

  7. java 数组赋值_java中为数组赋值的方法

    java中为数组赋值的方法 发布时间:2020-06-25 14:31:36 来源:亿速云 阅读:184 作者:Leah 这期内容当中小编将会给大家带来有关java中为数组赋值的方法,文章内容丰富且以 ...

  8. 怎么把字符串变成数组_Java中字符串split() 的使用方法,没你想的那么简单

    先看下面的方法,事先预测一下,经过split方法,按逗号进行分割为数组之后,生成的数组的长度是多少,目测很多人都觉得是8,但是结果却出乎意料.是5而不是8. private static void t ...

  9. java 语法 冒号_java中生僻的冒号跳转语法

    JAVA中冒号的一种用法,很少被人提及,我也从来没使用过.以前在一本书中看过的这种,该作者不推荐使用,今天闲了翻源码在String中看到: 定义标记scan: 括号中的内容如果遇到 break sca ...

最新文章

  1. linux 6.4 图形界面,为CentOS 6.4安装图形界面并用VNC远程连接
  2. Vue中使用a标签实现点击在新标签页中打开实现照片预览
  3. Lua 语言中的点、冒号与self
  4. docker 之volume
  5. 用 Flink 取代 Spark Streaming,知乎实时数仓架构演进【推荐】
  6. Eclipse下导入外部jar包的3种方式
  7. LeetCode 100. 相同的树(二叉树遍历)
  8. Linux常用命令拾遗
  9. 前端学习资料汇总(转)
  10. var a=function和function b有什么区别
  11. 史上最详细MFC调用mapX5.02.26步骤(附地图测试GST文件)
  12. 常见HTTP错误码模拟
  13. 电器元件——LM7805
  14. Linux中的系统语言包及UTF-8、en_US.UTF-8和zh_CN.UTF-8的区别
  15. 赫兹的单位换算_赫兹单位换算(赫兹的单位换算公式)
  16. 大数据分析——暑期黑马《延禧攻略》到底有多火!
  17. iOS上架详细通关教程(提交到AppStore)
  18. 【苹果推??iMessage群发设置内容参数】什么是苹果推信?什么是苹果推?什么是日历推
  19. 数据库 SQL Server 检测到基于一致性的逻辑 I/O 错误 页撕裂 执行 读取 期间,发生了该错误 恢复
  20. Crash Error Debugging

热门文章

  1. Linux内核的5个子系统
  2. Python自动化工具(自动化操作)
  3. PostgreSQL登录及修改密码
  4. Zetero引用特定格式参考文献的手把手操作
  5. 白痴学日语系列之Last Term附语法一
  6. learn more ,study less(一):整体性学习策略
  7. vector容器用法详解
  8. 企业选择外贸B2B平台需要考虑哪些因素
  9. 荐读:Xilinx ZYNQ 动手实操演练
  10. Mac系统中怎么绘制函数图像?附绘制函数图像教程~