先看下面的方法,事先预测一下,经过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,就是匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ fnrtv]。

然后下面,看运行结果。

这就是我们要的结果啦。

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

  1. java中对字符串进行解析_Java中字符串解析

    1.字符串不属于基本数据类型(基本数据类型有[byte,int,char,float,double,boolean,short,long]),字符串由单个或多个字符组成,本质上是字符数组,Java中提 ...

  2. java 字符串不等于_java中字符串不等于怎么判断

    java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...

  3. java中字符串不等于_java中字符串不等于怎么判断

    java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...

  4. java中字符串的操作_java中字符串的操作

    //创建一个字符数组 char[] charArr = {'a','b','c','d','e','f','g'}; //创建一个字符串 String str = new String(charArr ...

  5. java字符连接字符串数组_Java中连接字符串的最佳方法

    java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...

  6. 《魂斗罗:归来》手游子弹中没中,没你想得那么简单!

    无数玩家童年的神作重新回归,手机端多人联机,呼朋引伴一起重温当年的热血大作. 除了IP,剧情,对工程师而言,<魂斗罗:归来>更要解决的联机同步和命中同步等问题,简单说,一颗子弹打没打中,没 ...

  7. 《魂斗罗:归来》子弹中没中,没你想得那么简单!

    无数玩家童年的神作重新回归,手机端多人联机,呼朋引伴一起重温当年的热血大作.除了IP,剧情,对工程师而言,<魂斗罗:归来>更要解决的联机同步和命中同步等问题,简单说,一颗子弹打没打中,没你 ...

  8. C++接收字符串数组_Java 中初始化数组

    数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...

  9. java 字符串用法_java中字符串的用法

    1.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持.甚至Java的标识符都可以用汉字,但是没人会用吧(只在一本清华的< ...

最新文章

  1. 使用NTDSXtract离线抓取Domain Hash
  2. 软件架构设计——解释器模式
  3. Qt CheckBox的使用
  4. JAVA_IO流四大家族(1)
  5. 你在使用Gmail,Wallop,MSN Spaces,Three Degrees吗?
  6. 最短路径之Spfa算法
  7. 哪些职业申请贷款比较难?
  8. AgileConfig-如何使用AgileConfig.Client读取配置
  9. 谈自由,ASP.NET Core才是未来?
  10. 因果推断中期学习小结
  11. bzoj 4300绝世好题
  12. Github README.md中添加图片
  13. Lector阅读器折腾笔记
  14. 计算机网络原理学习笔记
  15. 想让“贾维斯”成为现实?物联网帮你拥有
  16. nginx 二 配置conf
  17. CAP定理和BASE原则
  18. 如何实现自动化按图片搜索淘宝商品(拍立淘)功能?拍立淘API接口item_search_img
  19. 区分Linux:eth0,eth1,eth2,lo
  20. R3.6.3下载 Rstudio下载及安装,网盘链接永久有效

热门文章

  1. CURL 模拟post和get请求
  2. 关于DELL服务器如果采购散件,进行服务器升级的相关说明
  3. 【bzoj4709】[Jsoi2011]柠檬 斜率优化
  4. C语言的getopt
  5. 金明的预算方案(分组背包)
  6. Apache ab并发负载压力测试
  7. 越狱Season 1- Episode 16
  8. RHEL/CentOS 6.x使用EPEL6与remi的yum源安装MySQL 5.5.x
  9. Java 微服务框架选型(Dubbo 和 Spring Cloud?),大厂 HR 如何面试
  10. Python模拟随机漫步