String.split()与StringUtils.split()

我们平时进行简单的字符串分割的时候,尽量不要用String自身的split方法,它是匹配正则表达式的,如果遇到$这种特殊字符,需要转义一下。用StringUtils.split()方法会更方便

使用apache StringUtils.split替代String.split
如果你对下面几个结果有疑惑的话,建议使用apache commons包的StringUtils.split来替代。

String[] strs = "".split(",");  

结果是strs.length=1,strs[0]=""

String[] strs = ",".split(",");  

结果是strs.length=0

String[] strs = ",1,".split(",");  

结果是strs.length=2,strs[0]="",strs[1]="1"

String[] strs = StringUtils.split(",1,,2,", ",");  

结果是strs.length=2,strs[0]="1",strs[1]="2"

 System.out.println(":ab:cd:ef::".split(":").length);//末尾分隔符全部忽略    
  System.out.println(":ab:cd:ef::".split(":",-1).length);//不忽略任何一个分隔符    
  System.out.println(StringUtils.split(":ab:cd:ef::",":").length);//最前面的和末尾的分隔符全部都忽略,apache commons    
  System.out.println(StringUtils.splitPreserveAllTokens(":ab:cd:ef::",":").length);//不忽略任何一个分隔符 apache commons     
输出:    
4    
6    
3    
6    
String s =",1,,2,3,4,,";
String[] split1 = s.split(",");
String[] split2 = StringUtils.splitString(s, ",");

调试结果:

总结: 
String.split()会包含空字符串,而且是包含 头部的和中间的, 不包含有效数字后面所有的空字符串. 
StringUtils.split()会过滤所有的空字符串. 当然空格不会被过滤.

 

String中的split(",")和split(",",-1)的区别:
 
1、当字符串最后一位有值时,两者没有区别
 
2、当字符串最后一位或者N位是分隔符时,前者不会继续切分,而后者继续切分。即前者不保留null值,后者保留。
package stringsplit;
public class stringSplit {
     public static void main(String[] args) {
          String line = "hello,,world,,,";
          String res1[] = line.split(",");
          String res2[] = line.split(",", -1);
          int i=1;
          for(String r: res1)
              System.out.println(i+++r);
          System.out.println("========================");
          i=1;
          for(String r: res2)
              System.out.println(i+++r);
     }
}

输出结果是:

1hello
2
3world
========================
1hello
2
3world
4
5
6

 

posted @ 2019-01-14 15:57  水木神舟10  阅读(2869)  评论(0编辑  收藏  举报