почему a в 0-м индексе массива при выполнении split() без разделителей?

public static void main(String[] args) {
    // TODO Auto-generated method stub

    String str="aaabbddaabbcc";
    String[] str2=str.split("");
    String pointer=str2[0];
    int count=0;
    String finalStr="";
    for(String str132:str2)
    {
        if(str132.equalsIgnoreCase(pointer))
        {
            ++count;
        }
        else
        {

            finalStr+=str132+count;
            count=0;
            pointer=str132;
            ++count;
        }
    }
    System.out.println(finalStr);
}

Почему при выполнении str.split("") я получаю "" в 0-м индексе массива str2?


person user3296744    schedule 28.03.2014    source источник
comment
В javadoc split есть ответ.   -  person Sotirios Delimanolis    schedule 28.03.2014
comment
Я бы сказал, что это дубликат stackoverflow.com/questions/4549228/   -  person The Guy with The Hat    schedule 28.03.2014


Ответы (1)


почему я получаю "" в 0-м индексе массива str2?

Поскольку используемый вами разделитель совпал здесь:

 aaaabbddaabbcc
^

Поскольку .split() собирает части, он "проходит мимо" при переходе в строку, здесь он собирает пустую строку.

Также обратите внимание, что, поскольку разделитель пуст, чтобы избежать бесконечных циклов, на следующей итерации .split() будет пересылать один символ, прежде чем начать поиск снова.

person fge    schedule 28.03.2014
comment
Это я, или в Java 8 это поведение меняется, и первая пустая строка также удаляется? - person Pshemo; 28.03.2014
comment
Подтвердите для java8, в индексе 0 нет пустой строки:/ - person A4L; 28.03.2014
comment
@A4L В Java 7 это хорошо известная проблема/поведение, поэтому ваше подтверждение является ложным. Но я не могу воспроизвести эту проблему с JDK 8 и Eclipse Kepler. - person Pshemo; 28.03.2014
comment
@Pshemo, я подтвердил для java8, мой тест java7 был неправильным, так как у меня была только настройка соответствия компилятора 1.7 в моем проекте песочницы, я забыл, что заменил jdk7 на jdk8:/ ... спасибо, что указали на это. - person A4L; 28.03.2014
comment
@Pshemo Да, вы правы, и если я не ошибаюсь, это было указано в документе split(regex, limit), которого не было в JDK 7: Когда в начале этой строки есть совпадение с положительной шириной, тогда пустая ведущая подстрока включается в начало результирующего массива. Однако совпадение с нулевой шириной в начале никогда не приводит к такой пустой начальной подстроке. - person Alexis C.; 28.03.2014
comment
@ZouZou И это решает дело. Теперь мне не нужно создавать отдельный вопрос об этом :) Или что, черт возьми. Я опубликую свой вопрос через несколько минут. Вы можете предоставить это в качестве ответа. - person Pshemo; 28.03.2014
comment
Когда в начале этой строки есть совпадение с положительной шириной, пустая ведущая подстрока включается в начало результирующего массива. Однако совпадение нулевой ширины в начале никогда не приводит к такой пустой начальной подстроке. Кто-нибудь может объяснить фразы в .Am new to java!! - person user3296744; 28.03.2014
comment
@ user3296744 См. of/22718904">это для дальнейшего объяснения. - person Alexis C.; 16.04.2014