Ответ 1
Разделитель является регулярным выражением. Регулярное выражение ""
соответствует в самом начале строки (до a
в adam
). Состояние docs:
Разделяет эту строку вокруг совпадений данное регулярное выражение.
Поэтому метод будет разбиваться вокруг матча до a
. В документах также говорится:
Этот метод работает так, как будто метод разделения с двумя аргументами с данное выражение и предельный аргумент от нуля. Пустые пустые строки поэтому не включены в результирующий массив.
и
Если n равно нулю то шаблон будет применяться как во много раз больше, массив может имеют длину и длину пустого строки будут отброшены ".
Следовательно, хотя в конце строки также будет совпадение, конечная пустая строка, которая будет получена, будет отброшена. Следовательно, ведущая пустая строка, но не конечная пустая строка. Если вы хотите получить пустую строку, просто передайте отрицательное значение в качестве второго аргумента:
"adam".split("", -1);
Это работает из-за этой цитаты из документов:
Если n не положительно, то шаблон будет применяться столько раз, сколько возможно, и массив может иметь любой длина.
Чтобы ответить на вопрос "почему в середине нет пустых строк?", регулярное выражение возвращает только одно совпадение для каждого места в строке. Поэтому не может быть двух совпадений между двумя последовательными символами в строке, поэтому, возвращаясь к моей первой цитате из документов, эти дополнительные пустые строки не будут присутствовать.