Как разбить строку с завершающими пустыми строками?

Я немного запутался в поведении Scala, поскольку он не работает последовательно и некоторые элементы списка отсутствуют. Например, если у меня есть строка CSV с 4 столбцами и 1 отсутствующим элементом.

"elem1, elem2,,elem 4".split(",") = List("elem1", "elem2", "", "elem4")

Большой! Это то, чего я ожидал бы.

С другой стороны, если оба элемента 3 и 4 отсутствуют, то:

"elem1, elem2,,".split(",") = List("elem1", "elem2")

В то время как я ожидаю, что он вернется

"elem1, elem2,,".split(",") = List("elem1", "elem2", "", "")

Я что-то упускаю?

Ответ 1

Как отметил Питер в своем ответе, "string".split(), как в Java, так и в Scala, по умолчанию не возвращает завершающие пустые строки.

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

String s = "elem1,elem2,,";
String[] tokens = s.split(",", -1);

И это принесет вам ожидаемый результат.

Здесь вы можете найти соответствующий Java-документ.

Ответ 2

Я считаю, что конечные пустые пространства не включаются в возвращаемое значение.

JavaDoc для split(String regex) говорит: "Этот метод работает, как если бы вы вызывали метод split с двумя аргументами с заданным выражением и предельным аргументом нуля. Поэтому пустые строки не включаются в результирующий массив".

Таким образом, в вашем случае нужно использовать split(String regex, int limit), чтобы получить завершающую пустую строку в возвращаемом значении.