昨天用split,有点疑问,于是就好好研究了下,先看以下代码:
String str1 = "50|101004|303110345112305|ZF230008|00||";
String str2 = "50|101004|303110345112305|ZF230008|00";
String str3 = "50|101004|303110345112305|ZF230008|00|";
String[] n1 = str1.split("\\|",-1);
String[] n2 = str2.split("\\|");
String[] n3 = str3.split("\\|");
System.out.println(n1.length);
System.out.println(n2.length);
System.out.println(n3.length);
这里要注意的一个点,分隔符为“.”(无输出),“|”(不能得到正确结果)转义字符时,“*”,“+”时出错抛出异常,都必须在前面加必须得加"//",如split(//|);
这里n1的长度7,n2的长度是5,n3的长度也是5.这个时候就需要看JDK源码了。
public String[] split(String regex, int limit)
limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。
而public String[] split(String regex) 是吧limit是默认为0 了。
现在大家知道了会把空字符串丢弃了,所以长度为5!!