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