2015-07-28 2 views
12

Функциональность разделения, по-видимому, отличается между 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. Как я могу это получить?

+27

Несмотря на имя сходство (возможно, немые решения EVER), они на самом деле разные языков. Вы обнаружите, что 'split' в C работает по-другому (жалуясь на то, что не смог найти его, в основном). – paxdiablo

+6

Как даже имеет смысл, что Java опускает пустые строки в конце раскола, но не предваряющие? Результат Javascript дает вам гораздо больше смысла. – connexo

+6

@connexo: http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#split%28java.lang.String%29: 'Поэтому пустые строки не включаются в результирующий массив. ' – paxdiablo

ответ

30

Javadoc на split(String regex):

Этот метод работает, как если путем вызова метода разделения двух аргументов с заданным выражением и предельного аргумента нулю. Поэтому конечные пустые строки не включаются в результирующий массив.

Javadoc на split(String regex, int limit):

Если п не является положительным, то шаблон будет применен столько раз, сколько это возможно, и массив может иметь любую длину. Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а конечные пустые строки будут отброшены.

Итак ... split("~#~", -1) должен сделать трюк.

1

Документация Java split() ясно упоминает, что конечные пустые строки будут содержать NOT.

Этот метод работает как бы путем вызова метода разделения с двумя аргументами с помощью данного выражения и предельного аргумента нулевого значения. Трейлинг пустой строки поэтому не включены в результирующий массив.

7

В документации по split() Java четко указано, что конечные пустые строки НЕ будут включены.

Этот метод работает как бы путем вызова метода разделения с двумя аргументами с помощью данного выражения и предельного аргумента нулевого значения. Таким образом, в результирующем массиве не включаются строки .

но вы можете достичь его

("~#~~#~~#~A~#~B~#~C~#~D~#~E~#~~#~~#~").split("~#~" , -1) 

который является перегруженным методом

Смежные вопросы