使用String.split()方法

时间:2012-01-01 13:54:10

标签: java regex string oop

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。

由于

2 个答案:

答案 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][!!]"
    }
}