原文地址:https://blog.csdn.net/qq_27093465/article/details/54910323

挺有意思的一个问题

先看下面的方法,事先预测一下,经过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)

就是这句话啦。

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

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

下面是又更新的

(2017/07/13更新)

现在要求字符串

"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() 的使用方法.的更多相关文章

  1. Java中字符串的一些常见方法

    1.Java中字符串的一些常见方法 /** * */ package com.you.model; /** * @author Administrator * @date 2014-02-24 */ ...

  2. Java中字符串indexof() 的使用方法

    Java中字符串中子串的查找共有四种方法(indexof())indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置.如果没有找到子字符串,则返回-1.如果 startind ...

  3. Java中字符串操作的基本方法总结:

    1.字母大小写转换: package com.imooc; public class SortDemo { public static void main(String[] args) { char ...

  4. Java里字符串split方法

    Java中的split方法以"."切割字符串时,需要转义 String str[] = s.split("\\.");

  5. PL/SQL实现JAVA中的split()方法的小例子

    众所周知,java中为String类提供了split()字符串分割的方法,所以很容易将字符串以指定的符号分割为一个字符串数组.但是在pl/sql中并没有提供像java中的split()方法,所以要想在 ...

  6. 【转】Java中字符串中子串的查找共有四种方法(indexof())

    原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int ...

  7. Java中字符串中子串的查找共有四种方法(indexof())

    Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...

  8. Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能

    Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...

  9. Java中的equals和hashCode方法

    本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...

随机推荐

  1. Spring getBean 首字母大小写问题

    如果类第一个字母大写第二个小写,那么首字母小写获取bean 如果第一个和第二个字母都是大写的,那个获取bean首字母要大写

  2. mysql的wait_timeout配置(此处处理方法是有问题的,不建议作为操作参考)

    mysql数据库有一个wait_timeout的配置,默认值为28800(即8小时). 在默认配置不改变的情况下,如果连续8小时内都没有访问数据库的操作,再次访问mysql数据库的时候,mysql数据 ...

  3. ubuntu 手动安装mysql

    申请了一台云主机,需要手动安装所有环境,今天将mysql安装过程记下. 安装mysqla. 下载不了gcc, 需要先运行apt-get updateb. cmake报错,每次要先删除cmakeCach ...

  4. 关于MFLAGS与MAKEFLAGS

    与子make通讯的选项 诸如‘-s’和‘-k’标志通过变量MAKEFLAGS自动传递给子make.该变量由make自动建立,并包含make收到的标志字母.所以,如果您是用‘make –ks’变量MAK ...

  5. Oracle和Mysql中mybatis模糊匹配查询区别

    1.Oracle AND NAME LIKE '%'||#{name}||'%' 2.Mysql AND NAME LIKE "%"#{name}"%"

  6. 【C#新特性】不用out ref同时返回多个值-元组Tuple

    元组Tuple,它是一种固定成员的泛型集合 下面先看看官方的一个使用例子: 创建一个包含7个元素的Tuple数组 // Create a 7-tuple. , , , , , );// Display ...

  7. 【truffle】Error: `truffle init` no longer accepts a project template name as an argument.

    下载范例工程时候.使用命令报错 truffle init webpack 错误如下: Error: `truffle init` no longer accepts a project templat ...

  8. sencha touch 模仿tabpanel导航栏TabBar(2013-11-7)

    基于sencha touch 2.2所写 代码: /* *模仿tabpanel导航栏 */ Ext.define('ux.TabBar', { alternateClassName: 'tabBar' ...

  9. js json转字符串

    在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如:JSON字符串:var str1 = '{ &quo ...

  10. mvn deploy命令上传包

    需求:有的时候需要单独上传release jar包,因为存在工程代码在A内网SVN,Nexus在B内网.这种情况下使用VPN也无法解决Jar包发布的问题. 这个时候采取的方式只能是: 打出jar包 - ...