Scala Split игнорирует последние значения, когда пусто - PullRequest
3 голосов
/ 12 июня 2019
scala> val st1 = "|||||||000001|09/01/2014|V|174500,00|22||BD |2540|LEC|1000|BEB|
       01|53||AE|111 ||49|94,22|6||||||||2|2|App|80|2|||"
scala> st1.split('|').length
resXX: Int = 39

scala> val st2 = "|||||||000001|09/01/2014|V|174500,00|22||BD |2540|LEC|1000|BEB|
       01|53||AE|111 ||49|94,22|6||||||||2|2|App|80|2| | |"
scala> st2.split('|').length
resXX: Int = 41

, то есть последние пустые поля игнорируются разделением.Есть ли какое-либо решение, кроме замены всех "||" на "| |"

ожидаемый результат Int = 41.

действительно в реальном файле у меня могут быть такие строки, как:

"|||||||000001|09/01/2014|V|174500,00|22||BD |2540|LEC|1000|BEB|
       01|53||AE|111 ||49|94,22|6||||||||2|2|App|80|2|||150"

- это 42-й столбец, содержащий число.(В этом случае результат равен Int = 42)

Каждая строка имеет одинаковое число |, но в зависимости от содержимого столбца, split('|').length возвращает другой результат!(31, 40, ..., 42).

Я могу понять отсутствие столбца после последнего разделителя, но не отсутствие предыдущих.

1 Ответ

4 голосов
/ 12 июня 2019

Эта проблема возникла в Java (поскольку здесь определяется String # split). Как вы можете видеть здесь , в случае по умолчанию (который равен limit=0), завершающие пустые строки отбрасываются.

Чтобы все заработало так, как вы ожидаете, вы можете использовать str.split('|', -1).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...