Различие работы split() в java и javaScript

Возник такой вопрос, а точнее не могу понять логику работы метода split() в java. Имеем:

  1. строка с множеством одинаковых символов (пусть будет символ переноса строки "\n\n\n\n\");
  2. аналогичная строка, но в конце есть другие символы ("\n\n\nfoo_bar");
  3. аналогичная строка, но с прочими символами в начале ("foo_bar\n\n\n\");
  4. строка, в которой всего один символ ("\n");
  5. строка, содержащая несколько символов в начале и в конце ("\n\nfoo_bar\n\n\");
  6. строка, содержащая символ в середине ("foo\nbar").

Задача: с помощью split() разбить все эти строки так, что бы в итоге получился массив размерностью количествоСимволовРазбиения + 1. Интересные вещи, с которыми столкнулся: если строка эквивалентна первому варианту, то в java получим пустой массив (размерность 0), а в javascript согласно условию (что на мой взгляд логично, т.к. это будет удовлетворять свойству множества), для второго варианта получим разбиение как и в javascript (т.е. в начале будут пустые строки, в конце оставшийся элемент), для третьего варианта получим один элемент (пустые строки не добавятся, что для меня является самым непонятным), четвертый вариант аналогичен первому, пятый вариант аналогичен второму, шестой отрабатывает ожидаемо.


Конкретно вопрос, почему это работает так и как возможно решить данную проблему на java помимо использования перегруженного метода split(), который помимо регулярки принимает еще лимит, насколько я понял, сколько значений должно быть в массиве.

Мой вариант решения проблемы конкретно для данного символа:

s.split("\n", (int) s.chars().filter(ch -> ch == '\n').count() + 1);

Спасибо за внимание.


Ответы (0 шт):