String strs[] = "SS1BB2CC3".split("\\D+");

     public static String Test(){
Date d = new Date(milli);
String strs[] = "SS1BB2CC3".split("\\D+"); for (int i = 0; i < strs.length; i++) {
System.out.println(strs[i]); }
return null;
}

结果如下

1
2
3

在1上面有一个看不见的空串。

大概可以猜测得到,split的行为,比如下面有一个串:

",1,2,3".split(",");

结果是

""

1

2

3

只能说,这行为太jb傻了吧!无法忍受!算法思路可能是遇到,就把前面的元素扔进数组里,前面没元素就扔个空串进去!最后的3右边没有,就默认当成最后一个字符串扔进数组里。

第一次遍历串“,1,2,3”       数组:

第二次遍历串“1,2,3”          数组:“”

第三次遍历串“2,3”               数组:“”  1

第四次遍历串“3”                     数组:“” 1 2

遍历完毕                                数组:“” 1 2 3

解决方法是,用于切割的字符左边不能没有元素 ,如果有需要加多个判断:

if (strs[0] == "" ) {
do something;
} else {
do something;
}

这也完美解析了为什么用","切割,遇到"1,,,,2"会出现3个空串,它的思维是递归的,把第一个,左边元素扔进数组,整个串下一次就变成了",,,2",这时第一个逗号左边没有元素,就扔个空串进数组。解决方法如下:

把","替换成",+",这样遇到一个","或者",,,"都会看成一个整体X,"1,2"和"1,,,2"都会被看成"1X2","," = ",,," = X,以X切割,X左边的元素是1,就把1扔进数组里,下一次串就变成"2",最后的元素没有切割符号直接扔数组里。于是strs = [1,2]而不是[1,"","","",2]。

Java字符串的split(String str)方法空串的问题的更多相关文章

  1. java字符串格式化:String.format()方法的使用

    转自:http://kgd1120.iteye.com/blog/1293633 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的读者应 ...

  2. Java字符串连接的多种实现方法及效率对比

    JDK 1.8(Java 8)里新增String.join()方法用于字符串连接.本文基于<Java实现String.join()和效率比较>一文,分析和比较四种自定义实现与String. ...

  3. Java 字符串分隔 split

    Java中的我们可以利用 split 方法(Java.lang.string.split)把字符串按照指定的分割符进行分割,然后返回字符串数组,下面是string.split的用法实例及注意事项. s ...

  4. Java字符串池(String Pool)深度解析

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在工作中,String类是我们使用频率非常高的一种对象类型.JVM为了提升性能和减少内存开销,避免字符串的重复创建,其维护了一块特殊的内存 ...

  5. Java字符串池(String Pool)深度解析(转)

    出自  http://www.cnblogs.com/fangfuhai/p/5500065.html 在工作中,String类是我们使用频率非常高的一种对象类型.JVM为了提升性能和减少内存开销,避 ...

  6. 理解Java字符串常量池与intern()方法

    String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo ...

  7. Java字符串比较(3种方法)以及对比 C++ 时的注意项

    字符串比较是常见的操作,包括比较相等.比较大小.比较前缀和后缀串等.在 Java 中,比较字符串的常用方法有 3 个:equals() 方法.equalsIgnoreCase() 方法. compar ...

  8. Java中区别.toString() ,(String),valueOf()方法

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结.常用的方法有Object.toString(),(String)要转换的对象,St ...

  9. 字符串对比.net String.EndsWith方法 (String)

    string str="web/abc.aspx"; if(str.EndsWith("abc.aspx")) { 此方法将 value 与位于此实例末尾.与 ...

随机推荐

  1. List、Map和Set的实现类

    List.Map和Set的实现类 1.List实现类 (1)ArrayList (2)Vector 2.Map实现类 (1)HashMap (2)Hashtable 3.Set实现类 (1)HashS ...

  2. Linux显示机器的处理器架构

    Linux显示机器的处理器架构 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ arch x86_64 youhaidong@youhaidong-ThinkP ...

  3. NCBI下载sra数据(新)

      今天要上NCBI下载sra数据发现没有下载的链接,网上查发现都是老的方法,NCBI页面已经变更,于是看了NCBI的help,并且记录下来新版的sra数据下载方法,要用NCBI的工具SRA Tool ...

  4. nodejs异步案例

    const fs = require('fs'); fs.readFile('./test.txt', 'utf-8', (err, data) => { err ? console.error ...

  5. C#图解教程 第二十三章 预处理指令

    预处理指令 什么是预处理指令基本规则#define和#undef指令条件编译条件编译结构诊断指令行号指令区域指令#pragma warning 指令 预处理指令 什么是预处理指令 源代码指定了程序的定 ...

  6. 【UVa11426】GCD - Extreme (II)(莫比乌斯反演)

    [UVa11426]GCD - Extreme (II)(莫比乌斯反演) 题面 Vjudge 题解 这.. 直接套路的莫比乌斯反演 我连式子都不想写了 默认推到这里把.. 然后把\(ans\)写一下 ...

  7. [USACO15FEB]审查(黄金)Censoring (Gold)

    题面 传送门 Sol AC自动机+栈,每次匹配到栈顶减去这个单词的长度,回到之前的状态 最后栈中留下的就是答案 # include <bits/stdc++.h> # define IL ...

  8. CTSC 选课

    题面(有删减) 题目描述 学校实行学分制.每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分.学校开设了N(N<300)门的选修课程,每个学生可选课程的数量M是给定的.学生选修了这M门 ...

  9. .net白盒测试

    很久没写博客了,刚好这段时间空闲,做点记录 前提:最近部门需要白盒测试的工具,在网上也搜索了很多资料,国内很少有类似的资料(很少公司.net代码进行白盒测试),最后在国外(FQ)网站查找到了部分资料 ...

  10. 制作windows系统合盘:把win7和win8/8.1打包在一起

    平时装系统的时候我比较喜欢win8.1,但是经常给别人装系统的时候别人很多都喜欢win7,但是我觉得这样很麻烦,于是就想做一个合盘,这样就很方便了,win7旗舰版里面其实封装了四个系统,或者说一个系统 ...