class ZiggyTest{
public static void main(String[] args) {
String str = "aaaaaaaaabb";
String [] s = str.split("a{3}");
for(String x : s){
System.out.print(" : " + x);
}
}
}
上述输出为: : : : bb
当split()进行拆分但在拆分之间没有任何内容时,会发生什么,如上例所示。值(在数组中)是否归类为null或空字符串或其他内容?
我期待数组的内容为{bb},因为字符串的其余部分在分割之间没有返回任何内容。
我真的很感兴趣为什么它将null / empty字符串存储在数组中而不是仅存储返回的值,即bb。
由于
答案 0 :(得分:2)
空字符串,通过编辑您的代码段可以更容易看到:
public class ZiggyTest{
public static void main(String[] args) {
String str = "aaaaaaaaabb";
String [] s = str.split("a{3}");
System.out.println(s.length);
for(String x : s){
if (x==null)
System.out.println("NULL HERE");
System.out.print(x);
}
}
}
答案 1 :(得分:2)
您可能想要读取零宽度匹配上的拆分。这里有些例子。试一试。
final public class SplitStr
{
private static void strDump(String[] arr)
{
for (String s : arr) {
System.out.format("[%s]", s);
}
System.out.println();
}
public static void main(String[] args)
{
strDump("1,234,567,890".split(","));
// "[1][234][567][890]"
strDump("1,234,567,890".split("(?=,)"));
// "[1][,234][,567][,890]"
strDump("1,234,567,890".split("(?<=,)"));
// "[1,][234,][567,][890]"
strDump("1,234,567,890".split("(?<=,)|(?=,)"));
// "[1][,][234][,][567][,][890]"
strDump(":a:bb::c:".split("(?=:)|(?<=:)"));
// "[][:][a][:][bb][:][:][c][:]"
strDump(":a:bb::c:".split("(?=(?!^):)|(?<=:)"));
// "[:][a][:][bb][:][:][c][:]"
strDump(":::a::::b b::c:".split("(?=(?!^):)(?<!:)|(?!:)(?<=:)"));
// "[:::][a][::::][b b][::][c][:]"
strDump("a,bb:::c d..e".split("(?!^)\\b"));
// "[a][,][bb][:::][c][ ][d][..][e]"
strDump("ArrayIndexOutOfBoundsException".split("(?<=[a-z])(?=[A-Z])"));
// "[Array][Index][Out][Of][Bounds][Exception]"
strDump("1234567890".split("(?<=\\G.{4})"));
// "[1234][5678][90]"
// Split at the end of each run of letter
strDump("Boooyaaaah! Yippieeee!!".split("(?<=(?=(.)\\1(?!\\1))..)"));
// "[Booo][yaaaa][h! Yipp][ieeee][!!]"
}
}