我发现java中的拆分正则表达式很贪婪
String str = ";;;";
System.out.println(str.split(";").length);
输出 - 0(错误)
预期 - 4
String str = ";;;a";
System.out.println(str.split(";").length);
输出 - 4
我尝试修改正则表达式并使用正则表达式使其变得懒惰,;+?但输出为 0。
任何想法如何使正则表达式在此处拆分为贪婪将不胜感激。
提前致谢
您需要指定限制,以实现您想要的。
str.split(";", -1); // -1 is the limit, which will make the split method greedy as you want.
非正数限制意味着该模式将被应用尽可能多的次数!
因此System.out.println(str.split(";").length);现在将4根据需要打印。
查看文档以获取更多详细信息。
尝试
String str = ";;;";
System.out.println(str.split(";",-1).length); //LIMIT missed
这与贪婪无关。它与 split() 实现有关。
默认情况下,所有尾随空白匹配都将被忽略。由于您只有空白匹配项,因此所有匹配项都将被丢弃。
要覆盖忽略尾随空格的这种行为,请使用第二个参数调用 split -1;
str.split(";", -1);
第二个参数n是限制,javadoc 说:
如果 n 为非正数,则该模式将尽可能多地应用,并且数组可以具有任意长度。如果 n 为零,则该模式将被应用尽可能多的次数,数组可以有任意长度,并且尾随的空字符串将被丢弃。
有关更多详细信息,请参阅javadoc 。split()
String.split(String s) API 表示尾随的空字符串不包含在结果数组中。如果您希望将它们包括在内,请尝试无限限制
String str = ";;;";
System.out.println(str.split(";", Integer.MAX_VALUE).length);