java关于split函数的问题,请问输出结果为什么是0;2;3?
String[]str1=";;;".split(";");String[]str2=";a;;".split(";");String[]str3=";;a;".spli...
String[] str1 = ";;;".split(";");
String[] str2 = ";a;;".split(";");
String[] str3 = ";;a;".split(";");
System.out.println(str1.length);
System.out.println(str2.length);
System.out.println(str3.length); 展开
String[] str2 = ";a;;".split(";");
String[] str3 = ";;a;".split(";");
System.out.println(str1.length);
System.out.println(str2.length);
System.out.println(str3.length); 展开
3个回答
推荐于2016-04-09
展开全部
jdk1.6_API 中有2个split()函数。
第1个是split(String regex,int limit),limit与模式被限制使用的次数有关(若limit == n and n > 0,则模式最多被应用n-1次, 之后若该字符串未匹配完,则返回剩余字符串)。
当limit的值为0时,模式可以使用尽可能多的次数(字符串可以完全匹配),但返回结果中结尾的空子串被丢弃了。
楼主调用的是第2个split(String regex)函数,而该函数是调用split(String regex, 0)来实现的,现在limit == 0,就会舍弃后面的空串。
若要详细了解,请参考java API。
public class T{
public static void main(String[] args){
String[] str1 = ";;;".split(";");
String[] str11 = ";;;".split(";", -1);
String[] str2 = ";a;;".split(";");
String[] str22 = ";a;;".split(";", -1);
String[] str3 = ";;a;".split(";");
String[] str33 = ";;a;".split(";", -1);
String[] str4 = ";;a;;".split(";");
String[] str44 = ";;a;;".split(";", -1);
String[] str5 = ";;a;;;".split(";");
String[] str55 = ";;a;;;".split(";", -1);
System.out.println("<1>\n"+str1.length);
prtStrArr(str1);
System.out.println(str11.length);
prtStrArr(str11);
System.out.println("<2>\n"+str2.length);
prtStrArr(str2);
System.out.println(str22.length);
prtStrArr(str22);
System.out.println("<3>\n"+str3.length);
prtStrArr(str3);
System.out.println(str33.length);
prtStrArr(str33);
System.out.println("<4>\n"+str4.length);
prtStrArr(str4);
System.out.println(str44.length);
prtStrArr(str44);
System.out.println("<5>\n"+str5.length);
prtStrArr(str5);
System.out.println(str55.length);
prtStrArr(str55);
}
private static void prtStrArr(String[] s){
for(int i=0;i < s.length;i++)
System.out.print("["+s[i]+"]");
System.out.println();
}
}
limit == -1 代表,不丢弃结尾空串
上述代码,可以更好理解split();
更多追问追答
追问
java api中String str="boo:and:foo";
str.split("o") 结果b后面有一个空格
{ "b", "", ":and:f" },两个重叠的字符中间有一个空字符,以"boo"类推";;a;" 问题中str3长度应该为2即{"",a},为什么会是3呢?
追答
";;a;" 相当于 "[];[];[a];[]",省去结尾的[],剩下的子串是3个啊
展开全部
你反编译代码进去看下split的实现.
底层实现调用的都是这个方法.
public String[] split(String regex) {
return split(regex, 0);
}
简单来描述这个0的概念就是把结尾的空字符串丢弃.所以你第一个数组输出为0,而第二个数组输出为2.
如果你这么写String[] str1 = ";;;".split(";",-1); 那输出数组长度就为4.
这里参数-1的概念就是不丢弃字符串.
这里有篇博文介绍的挺详细 ,有很多列子,你可以参考一下
http://yinny.iteye.com/blog/1750210
底层实现调用的都是这个方法.
public String[] split(String regex) {
return split(regex, 0);
}
简单来描述这个0的概念就是把结尾的空字符串丢弃.所以你第一个数组输出为0,而第二个数组输出为2.
如果你这么写String[] str1 = ";;;".split(";",-1); 那输出数组长度就为4.
这里参数-1的概念就是不丢弃字符串.
这里有篇博文介绍的挺详细 ,有很多列子,你可以参考一下
http://yinny.iteye.com/blog/1750210
更多追问追答
追问
java api中String str="boo:and:foo";
str.split("o") 结果b后面有一个空格
{ "b", "", ":and:f" },两个重叠的字符中间有一个空字符,以"boo"类推";;a;" 问题中str3长度应该为2即{"",a},为什么会是3呢?
追答
String[] str3 = ";;a;".split(";");
第一个双引号到第一个分号为1个字符,
第一个分号到第二个分号为1个字符,
第二个分号到a为1个字符,
a到第三个分号为一个字符(这个最后的空串字符会舍弃)。 总共3个字符。 没问题啊
java api中String str="boo:and:foo";
也是一样 第一个双引号到 第一个o为一个字符,
第一个o到第二个o为一个字符
第二个o到:andf为一个字符
后面的都当空串舍弃了. 不就是{ "b", "", ":and:f" }了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
因为它的参数其实是正则表达式
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询