转:Java中字符串split() 的使用方法.
原文地址: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() 的使用方法.的更多相关文章
- Java中字符串的一些常见方法
		
1.Java中字符串的一些常见方法 /** * */ package com.you.model; /** * @author Administrator * @date 2014-02-24 */ ...
 - Java中字符串indexof() 的使用方法
		
Java中字符串中子串的查找共有四种方法(indexof())indexOf 方法返回一个整数值,指出 String 对象内子字符串的开始位置.如果没有找到子字符串,则返回-1.如果 startind ...
 - Java中字符串操作的基本方法总结:
		
1.字母大小写转换: package com.imooc; public class SortDemo { public static void main(String[] args) { char ...
 - Java里字符串split方法
		
Java中的split方法以"."切割字符串时,需要转义 String str[] = s.split("\\.");
 - PL/SQL实现JAVA中的split()方法的小例子
		
众所周知,java中为String类提供了split()字符串分割的方法,所以很容易将字符串以指定的符号分割为一个字符串数组.但是在pl/sql中并没有提供像java中的split()方法,所以要想在 ...
 - 【转】Java中字符串中子串的查找共有四种方法(indexof())
		
原文网址:http://wfly2004.blog.163.com/blog/static/1176427201032692927349/ Java中字符串中子串的查找共有四种方法,如下:1.int ...
 - Java中字符串中子串的查找共有四种方法(indexof())
		
Java中字符串中子串的查找共有四种方法(indexof()) Java中字符串中子串的查找共有四种方法,如下:1.int indexOf(String str) :返回第一次出现的指定子字符串在此字 ...
 - Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能
		
Java中Pattern类的quote方法将任何字符串(包括正则表达式)都转换成字符串常量,不具有任何匹配功能. 下面是个例子: import org.junit.Test; import java. ...
 - Java中的equals和hashCode方法
		
本文转载自:Java中的equals和hashCode方法详解 Java中的equals方法和hashCode方法是Object中的,所以每个对象都是有这两个方法的,有时候我们需要实现特定需求,可能要 ...
 
随机推荐
- ArcGIS应用
			
1.ArcGIS Server发布资源报错:网络资源问题 有可能是跟网络相关的服务没有开启,开启相关服务器后有可能可以解决此问题. 还有可能通过此法解决:开始--控制面板--网络和共享中心--高级共享 ...
 - Linux应急响应入侵排查思路
			
0x00 前言  当企业发生黑客入侵.系统崩溃或其它影响业务正常运行的安全事件时,急需第一时间进行处理,使企业的网络信息系统在最短时间内恢复正常工作,进一步查找入侵来源,还原入侵事故过程,同时给出解 ...
 - Android的Fragment中onActivityResult不被调用
			
1.检查该Fragment所属的Activity中,是否重写了onActivityResult方法. 2.检查Fragment中的startActivityForResult的调用方式. 请确保不要使 ...
 - 【总结】redis和memcached的区别
			
1.Redis和Memcache都是将数据存放在内存中,都是内存数据库.不过memcache还可用于缓存其他东西,例如图片.视频等等: 2.Redis不仅仅支持简单的k/v类型的数据,同时还提供lis ...
 - gdb 调试main
			
gdb 调试main带参数 gdb program start a b c//参数为a b c然后从main函数开始 r a b c//参数为a b c来运行程序
 - Qt编写密钥生成器+使用demo(开源)
			
在很多商业软件中,需要提供一些可以试运行的版本,这样就需要配套密钥机制来控制,纵观大部分的试用版软件,基本上采用以下几种机制来控制.1:远程联网激活,每次启动都联网查看使用时间等,这种方法最完美,缺点 ...
 - 【linux系列】cenos7安装jdk
			
一.下载jdk,我采用的jdk.tar.gz的安装包 二.创建jdk安装目录 三.安装包解压 四.jdk环境变量配置 五.使配置的环境变量生效 六.检查jdk是否安装成功
 - bootstrap 中这段代码 使bundles 失败
			
_:-ms-fullscreen, :root input[type="date"], _:-ms-fullscreen, :root input[type="time& ...
 - 题目1040:Prime Number(第k个素数)
			
题目链接:http://ac.jobdu.com/problem.php?pid=1040 详解链接:https://github.com/zpfbuaa/JobduInCPlusPlus 参考代码: ...
 - 【黑金原创教程】【FPGA那些事儿-驱动篇I 】实验十四:储存模块
			
实验十四比起动手笔者更加注重原理,因为实验十四要讨论的东西,不是其它而是低级建模II之一的模块类,即储存模块.接触顺序语言之际,“储存”不禁让人联想到变量或者数组,结果它们好比数据的暂存空间. . i ...