java中String类的split()⽅法详解
split(String regex)为java.lang.String类的⽅法,其功能可简单描述为在给定正则表达式的匹配位置拆分该字符串。
该⽅法的具体定义为
public String[]split(String regex){
return split(regex,0);
}
可以很明显地看到⽅法内部调⽤了⼀个重载的split(regex,0)⽅法,split(regex)⽅法最终返回⼀个字符串数组。
split(regex,0)的原型为split(String regex, int limit),该⽅法中的regex为匹配样板,⽽参数limit似乎不太好理解,通过查阅得到如下说明
The limit parameter controls the number of times the pattern is applied and therefore affects the length of the
resulting array. If the limit n is greater than zero then the pattern will be applied at most n - 1 times, the array’s length will be no greater than n, and the array’s last entry will contain all input beyond the last matched delimiter. If n is non-positive then the pattern will be applied as many times as possible and the array can have any length. If n is zero then the pattern will be applied as many times as possible, the array can have any length, and trailing empty strings will be discarded.
翻译如下:
limit这个参数控制样板(pattern)应⽤的次数,因此它影响结果数组的长度。如果limit的值为n>0,那么样板会被应⽤n-1次,如此⼀来结果数组的长度就会不⼤于n,并且结果数组的最后⼀个元素会包含从最后⼀个样板匹配位置的下⼀个字符到整个输⼊字符串结束的所有字符。如果n<=0,样板会被尽可能地匹配,所以此时结果数组的长度是未知的;如果此时n=0,那么输⼊字符串末尾的空格会被丢弃。
上⾯这段话什么意思?看了说明之后依旧⽆法理解,下⾯我们通过实验来探索。
public class Test {
public static void main(String[] args){
String s1 ="a,b,c";
String s2 ="a,b,c,,,";
String s3 ="a,b,c,,,d";
String[] _s1 = s1.split(",");
String[] _s2 = s2.split(",");
String[] _s3 = s3.split(",");
System.out.print("s1调⽤split⽅法后的结果为:");
for(String s : _s1){
System.out.print("\""+ s +"\""+"\t");
}
System.out.println();
System.out.print("s2调⽤split⽅法后的结果为:");
for(String s : _s2){
System.out.print("\""+ s +"\""+"\t");
}
System.out.println();
System.out.print("s3调⽤split⽅法后的结果为:");
for(String s : _s3){
System.out.print("\""+ s +"\""+"\t");
java中split的用法}
}
}
上⾯这段代码中使⽤了只有⼀个参数的split()⽅法,该⽅法调⽤split(regex,0)⽅法。调试结果如下
图1
如果将代码中的split(",")⽅法替换为split("," -1)则得到如下输出
图2
⽐较s2的输出,可知“如果n<=0,样板会被尽可能地匹配,所以此时结果数组的长度是未知的;如果此时n=0,那么输⼊字符串末尾的空格会被丢弃。”的涵义,图1中s2的结果不包含靠后的空格,与n=0的情形相匹配;图2中s2的结果包含靠后的所有空格,与n<0相匹配。
如果将代码中的split(",")⽅法替换为split("," 3)则得到如下输出
图3
从图3可知,从字符“c”开始其后的字符被处理为⼀个字符串,“,”⼀共被匹配了(3-1)次,这和当n>0时的情形相符。
理解完⽂档中的内容后还需要注意如果字符中出现两个相连的样板,则匹配完成后,这两个相连样板会被消去,但他们中间会产⽣⼀个空格字符串,该空格字符串会被返回到字符数组String[]中;如果样板出现在字符末尾,那字符串数组String[]中的最后⼀位元素也是空格
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论