怎么把字符串变成数组_Java中字符串split() 的使用方法,没你想的那么简单
先看下面的方法,事先预测一下,经过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() 的使用方法,没你想的那么简单相关推荐
- java中对字符串进行解析_Java中字符串解析
1.字符串不属于基本数据类型(基本数据类型有[byte,int,char,float,double,boolean,short,long]),字符串由单个或多个字符组成,本质上是字符数组,Java中提 ...
- java 字符串不等于_java中字符串不等于怎么判断
java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...
- java中字符串不等于_java中字符串不等于怎么判断
java中字符串不等于可以使用equals()方法判断,equals()方法用于将字符串与指定的对象比较. 语法public boolean equals(Object anObject) 参数 an ...
- java中字符串的操作_java中字符串的操作
//创建一个字符数组 char[] charArr = {'a','b','c','d','e','f','g'}; //创建一个字符串 String str = new String(charArr ...
- java字符连接字符串数组_Java中连接字符串的最佳方法
java字符连接字符串数组 最近有人问我这个问题–在Java中使用+运算符连接字符串是否对性能不利? 这让我开始思考Java中连接字符串的不同方法,以及它们如何相互对抗. 这些是我要研究的方法: 使用 ...
- 《魂斗罗:归来》手游子弹中没中,没你想得那么简单!
无数玩家童年的神作重新回归,手机端多人联机,呼朋引伴一起重温当年的热血大作. 除了IP,剧情,对工程师而言,<魂斗罗:归来>更要解决的联机同步和命中同步等问题,简单说,一颗子弹打没打中,没 ...
- 《魂斗罗:归来》子弹中没中,没你想得那么简单!
无数玩家童年的神作重新回归,手机端多人联机,呼朋引伴一起重温当年的热血大作.除了IP,剧情,对工程师而言,<魂斗罗:归来>更要解决的联机同步和命中同步等问题,简单说,一颗子弹打没打中,没你 ...
- C++接收字符串数组_Java 中初始化数组
数组是一种有用的数据类型,用于管理在连续内存位置中建模最好的集合元素.下面是如何有效地使用它们. -- Chris Hermansen(作者) 有使用 C 或者 FORTRAN 语言编程经验的人会对数 ...
- java 字符串用法_java中字符串的用法
1.String中的每个字符都是一个16位的Unicode字符,用Unicode很容易表达丰富的国际化字符集,比如很好的中文支持.甚至Java的标识符都可以用汉字,但是没人会用吧(只在一本清华的< ...
最新文章
- 使用NTDSXtract离线抓取Domain Hash
- 软件架构设计——解释器模式
- Qt CheckBox的使用
- JAVA_IO流四大家族(1)
- 你在使用Gmail,Wallop,MSN Spaces,Three Degrees吗?
- 最短路径之Spfa算法
- 哪些职业申请贷款比较难?
- AgileConfig-如何使用AgileConfig.Client读取配置
- 谈自由,ASP.NET Core才是未来?
- 因果推断中期学习小结
- bzoj 4300绝世好题
- Github README.md中添加图片
- Lector阅读器折腾笔记
- 计算机网络原理学习笔记
- 想让“贾维斯”成为现实?物联网帮你拥有
- nginx 二 配置conf
- CAP定理和BASE原则
- 如何实现自动化按图片搜索淘宝商品(拍立淘)功能?拍立淘API接口item_search_img
- 区分Linux:eth0,eth1,eth2,lo
- R3.6.3下载 Rstudio下载及安装,网盘链接永久有效