Использование метода String.split () - PullRequest
0 голосов
/ 01 января 2012
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 () выполняет разбиение, но между разбиением нет ничего, как в предыдущем примере.Значение (в массиве) классифицируется как нуль, или пустая строка, или что-то еще?

Я ожидал, что содержимое массива будет {bb}, потому что остальная часть строки не возвращает ничего между разбиением.

Меня действительно интересовало, почему он хранит пустую / пустую строку в массиве, а не просто хранит возвращенные значения, т.е. bb.

Спасибо

Ответы [ 2 ]

2 голосов
/ 01 января 2012

Вы можете прочитать разделение на совпадения с нулевой шириной. Вот несколько примеров. Попробуйте.

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][!!]"
    }
}
2 голосов
/ 01 января 2012

Пустая строка, которую легче увидеть, отредактировав свой фрагмент:

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);
        }
    }   
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...