Различие между Java и JavaScript
Функциональность разделения, по-видимому, отличается между Java и JavaScript.
Мне не нужно точно соответствовать определенным критериям регулярного выражения или использовать
регулярное выражение на основе lookahead. Моя проблема заключается в том, что пустые совпадения возвращаются после окончательного соответствия разделенного регулярного выражения (которое представляет собой простой набор символов, а не выражение).
Ниже приведен пример результата, который я пытаюсь достичь, и что я действительно получаю.
Java
("~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~").split("~#~")
/* results with an array of length 8 */ (java.lang.String[]) [, , , A, B, C, D, E]
Javascript
"~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~".split("~#~")
/* results with an array of length 11 */ ["", "", "", "A", "B", "C", "D", "E", "", "", ""]
Я действительно не могу положиться на это хорошее объяснение, поскольку я работаю с Java-приложением, и раскол вызывает у меня проблемы, я хочу получить тот же результат, что и в JavaScript. Как я могу это получить?
Ответы
Ответ 1
Javadoc on split(String regex)
:
Этот метод работает, как если бы он вызывал метод разделения с двумя аргументами с заданным выражением и предельным аргументом нулевого. Поэтому конечные пустые строки не включаются в результирующий массив.
Javadoc on split(String regex, int limit)
:
Если n не является положительным, шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину. Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а конечные пустые строки будут отброшены.
Итак... split("~#~", -1)
должен сделать трюк.
Ответ 2
Документация Java split() четко указывает, что конечные пустые строки НЕ будут включены.
Этот метод работает, как если бы вы вызывали метод разделения с двумя аргументами с помощью данное выражение и предельный аргумент нуля. Трейлинг пустой поэтому строки не включены в результирующий массив.
но вы можете достичь этого
("~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~").split("~#~" , -1)
который является перегруженным методом
Ответ 3
Документация Java split()
четко упоминает, что конечные пустые строки будут содержать НЕ.
Этот метод работает, как если бы вы вызывали метод разделения с двумя аргументами с помощью данное выражение и предельный аргумент нуля. Конечный пуст поэтому строки не включены в результирующий массив.