原文地址: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. 子窗口访问父页面iframe中的iframe,top打开的子窗口访问父页面中的iframe中的iframe

    子窗口访问父页面iframe中的iframe 子窗口访问最顶层页面中的iframe中的iframe top打开的子窗口访问父页面中的iframe中的iframe top打开的子窗口访问最顶层页面中的i ...

  2. ch3:文件处理与异常

    如何从文件读入数据? python中的基本输入机制是基于行的: python中标准的“打开-处理-关闭”代码: the_file=open('文件全称') #处理文件中的数据 the_file.clo ...

  3. 为啥RESTFULL如此重要?

    为啥RESTFULL如此重要? 2014-6-3 20:13| 发布者: admin| 查看: 57| 评论: 0|来自: java365 摘要: 本文我们将讨论REST,它定义了一组体系架构原则,您 ...

  4. phpStorm中使用xdebug断点调试php代码

    配置好xdebug,也能使得phpstorm像java哪像跑断点调试,爽的一笔!!! 下载xdebug并配置 [XDebug] zend_extension=php_xdebug-2.4.0rc3-5 ...

  5. mysql 创建merge表方便查询

    SELECT COUNT(*) FROM `comment` SHOW CREATE TABLE `comment` CREATE TABLE `comment1` ( `id` ) NOT NULL ...

  6. PowerDesigner 同步Name到Comment 及 同步 Comment 到Name

    PowerDesigner中使用方法为:     PowerDesigner->Tools->Execute Commands->Edit/Run Scripts 代码一:将Name ...

  7. JS - 兼容到ie7的自定义样式的滚动条封装

    demo: html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  8. 如何启动、关闭和设置ubuntu防火墙

    如何启动.关闭和设置ubuntu防火墙 引自:http://www.cnblogs.com/jiangyao/archive/2010/05/19/1738909.html 就这句话就够了,下面的可以 ...

  9. Android.mk 用法介绍

    一个Android.mk file用来向编译系统描述你的源代码.具体来说:该文件是GNU Makefile的一小部分,会被编译系统解析一次或多次.你可以在每一个Android.mk file中定义一个 ...

  10. 23种设计模式之代理模式(Proxy)

    代理模式是一种对象结构型模式,可为某个对象提供一个代理,并由代理对象控制对原对象的引用.代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合度,其缺点是请求的处理速度会变慢,并且实现代理模 ...