关于String类的split()方法
API举了一个例子:对于字符串 "boo:and:foo",regex为o,limit为5时,返回:{ "b", "", ":and:f", "", "" }
我的问题是:"boo:and:foo"在"b"后面有2个o,在"f"后面也有2个o,应该都能匹配2次,但是为什么结果中"b"后面只有一个空串,在f后面有两个空串,空串是怎么产生的?
我在做编译器,这个方法很关键,急需各位的帮助.
API上的关于这个方法的说明是:
根据匹配给定的正则表达式来拆分此字符串。
此方法返回的数组包含此字符串的每个子字符串,这些子字符串由另一个匹配给定的表达式的子字符串终止或由字符串结束来终止。数组中的子字符串按它们在此字符串中的顺序排列。如果表达式不匹配输入的任何部分,则结果数组只具有一个元素,即此字符串。
limit 参数控制模式应用的次数,因此影响结果数组的长度。如果该限制 n 大于 0,则模式将被最多应用 n - 1 次,数组的长度将不会大于 n,而且数组的最后项将包含超出最后匹配的定界符的所有输入。如果 n 为非正,则模式将被应用尽可能多的次数,而且数组可以是任意长度。如果 n 为零,则模式将被应用尽可能多的次数,数组可有任何长度,并且结尾空字符串将被丢弃。 展开
split 方法:将一个字符串分割为子字符串,然后将结果作为字符串数组返回。
split 方法参数为stringObj.split([separator,[limit]])
stringObj(必选项) ,指要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator(可选项),指字符串或正则表达式对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽略该选项,返回包含整个字符串的单一元素数组。
limit(可选项)该值用来限制返回数组中的元素个数。
说明 :
split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。
例:String oldStr = "z,,,z";
String[] strs = oldStr.split(",");
for(String str:strs) {
System.out.println(str); }
扩展资料
String类的split()方法的正确写法:
1、如果用“.”作为分隔的话,必须是如下写法:String.split("\\."),这样才能正确的分隔开,不能用String.split(".");。
2、如果用“|”作为分隔的话,必须是如下写法:String.split("\\|"),这样才能正确的分隔开,不能用String.split("|");“.”和“|”都是转义字符,必须得加"\\";(这里是利用了java中正则表达式的一个点)。
3、如果在一个字符串中有多个分隔符,可以用“|”作为连字符,比如:“a=1 and b =2 or c=3”,把三个都分隔出来,可以用String.split("and|or");。
参考资料来源:百度百科——split函数
推荐于2017-10-08 · 知道合伙人数码行家
知道合伙人数码行家
向TA提问 私信TA
stringObj.split([separator],[limit])
参数:stringObj 必选项。要被分解的 String 对象或文字。该对象不会被 split 方法修改。
separator 可选项。字符串或 正则表达式 对象,它标识了分隔字符串时使用的是一个还是多个字符。如果忽
略该选项,返回包含整个字符串的单一元素数组。 limit可选项。该值用来限制返回数组中的元素个数。
说明:split 方法的结果是一个字符串数组,在 stingObj 中每个出现 separator 的位置都要进行分解。separator 不作为任何数组元素的部分返回。
split 的实现直接调用的 matcher 类的 split 的方法。“ . ”在正则表达式中有特殊的含义,因此我们使用的时候必须进行转义"\\."
如果用竖线“|”分隔的话,将出现不可得到的结果,必须改为“\\|”
,+ * 不是有效的模式匹配规则表达式,用"//*" "//+"转义后即可得到正确的结果。
实例:
public class StringSplit {
public static void main(String[] args) throws Exception {
String originalString = new String("5,8,6,9,12,56,3");
String[] destString = originalString.split(",");
for(int i=0; i < destString.length; i++)
System.out.print(destString[i]+" ");
System.out.println( );
String original = new String("abc,ef,bdj,983,r56,34u");
String[] dest = original.split(",",3);
for(int i=0; i < dest.length; i++)
System.out.println(dest[i]);
System.out.println( );
String s = new String("01:大汽车");
String a[] = s.split(":");
System.out.println(a[0]);
System.out.println(a[1]);
System.out.println( );
String str = "1one123two456obc";
String[] strs2 = str.split("o");
for(int i = 0; i < strs2.length; i++)
System.out.println("strs2["+i+"] = "+strs2[i]);
String value = "192.168.128.33";
String[] names = value.split("\\.");
for (int i = 0; i < names.length; i++)
System.out.println(names[i]);
String value2 = "ABCD|568|ER5|54P";
String[] names2 = value2.split("\\|");
for (int i = 0; i < names2.length; i++)
System.out.println(names2[i]);
}
}
其实这个方法一般这样用:
String[] arr = "11,22,33,44".splite(",");
从而方便的得到一个字符串数组:arr={"11", "22", "33", "44"};
字符串的头尾都会加一个的
你还可以试试 "o:and:foo".split("o",5); 返回的是length为4的字符数组
你还可以试试 "oo:and:foo".split("o",5); 返回的是length为5的字符数组