Подтвердить что ты не робот

Scala string.split не работает

Ниже приводится мой выход REPL. Я не уверен, почему string.split здесь не работает.

val s = "Pedro|groceries|apple|1.42"
s: java.lang.String = Pedro|groceries|apple|1.42

scala> s.split("|")
res27: Array[java.lang.String] = Array("", P, e, d, r, o, |, g, r, o, c, e, r, i, e, s, |, a, p, p, l, e, |, 1, ., 4, 2)
4b9b3361

Ответ 1

Если вы используете кавычки, вы запрашиваете разделение регулярных выражений. | является символом "или", поэтому ваше регулярное выражение ничего не соответствует или ничего. Итак, все разделено.

Если вы используете split('|') или split("""\|"""), вы должны получить то, что хотите.

Ответ 2

| - специальный символ регулярного выражения, который используется как логический оператор для операций OR.

Поскольку java.lang.String # split (String regex); принимает регулярное выражение, вы разделяете строку на "none ИЛИ none", что является целой другой специальностью о расщеплении регулярных выражений, где ни один из них не означает "между каждым отдельным символом".

Чтобы получить то, что вы хотите, вам нужно избежать правильного шаблона регулярного выражения. Чтобы избежать шаблона, вам нужно добавить символ \, и поскольку \ является специальным символом String (например, \t и \r), вам нужно фактически удвоить escape, ll в итоге s.split("\\|").

Для полного синтаксиса регулярных выражений Java см. java.util.regex.Pattern javadoc.

Ответ 3

Split принимает регулярное выражение как первый аргумент, поэтому ваш вызов интерпретируется как "пустая строка или пустая строка". Чтобы получить ожидаемое поведение, вам нужно избежать символа "\\ |".