Как разбить строку с завершающими пустыми строками?
Я немного запутался в поведении 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)
, чтобы получить завершающую пустую строку в возвращаемом значении.