2016-12-13 2 views
1

В JavaScript Почему Java отличается от JavaScript при выполнении этой расщепленной функции()

",,".split(",").length // Return 3 

Но в Java:

",,".split(",").length // Return 0 

Почему Java игнорирует все пустые строки между моментом, когда Разделить строку с charater?

+2

Очевидно, это разные языки. Но можно спросить, что на двух языках функция, созданная с той же целью, дает разные результаты. Его можно было бы запросить в stackoverflow, и на него можно было бы ответить. – afzalex

+0

Хотя ваше наблюдение верное, я думаю, что у разработчиков java/javascript нет ни одного приложения, которое может сказать вам «почему». Возможно, они указали это в документации, хотя это, скорее всего, выбор предпочтений. Я голосовал, чтобы закрыть этот вопрос, поскольку это прежде всего мнение. – n247s

ответ

3

Java возникают две перегружать функции из String.split(..)

1. public String[] split(String regex, int limit){} 
2. public String[] split(String regex) . This equals with split(String regex, int limit = 0) 

limit С параметром сделать String.spit Явы гибкой. Предельный параметр управляет количеством применений шаблона и, следовательно, влияет на длину результирующего массива. Если предел n больше нуля, шаблон будет применен не более n - 1 раз, длина массива будет не больше n, а последняя запись массива будет содержать все входные данные за пределами последнего сопоставленного разделителя. Если n не является положительным, шаблон будет применяться столько раз, сколько возможно, и массив может иметь любую длину. Если n равно нулю, шаблон будет применяться столько раз, сколько возможно, массив может иметь любую длину, а конечные пустые строки будут отброшены. Подробнее here

Так что в вашем случае с Java:

",,".split(",").length // Return 0 
",,".split(",", -1).length // Return 3 
0

Чтобы узнать, почему есть разница, которую вы должны понять split(String regex, int limit) первый.

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

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

java docs

Сейчас в split(String regex). Предполагается, что эта перегруженная функция даст тот же результат, что и выше, с предельным аргументом нуля.

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

Теперь, с другой стороны, когда мы говорим о javascript. Мы знаем, что в нем не может быть перегрузки. Они сделали одну функцию и имеют необязательный параметр. Если вы предоставите аргумент предела, он будет ограничивать количество найденных разделов.

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

javascript docs from developer.mozilla.org

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