2012-07-01 2 views
19

Следующий мой выход REPL. Я не уверен, почему string.split здесь не работает.scala 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) 

ответ

56

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

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

+0

хорошо один. В scala, в чем разница между «и»? – riship89

+2

'' "" stuff "" "' цитирует буквальную строку. '' stuff'' интерпретирует escape-символы. Так как обратная косая черта - это escape-символ _both_ в строках Java _and_ regexes, вам нужно будет избежать escape-символа, чтобы получить его в регулярное выражение: '' \\ | "'. Это быстро запутывает _very_, поэтому лучше использовать тройные кавычки и перейти к литеральной строке. –

+0

и ... является «somestring» же, как «» «somestring» «»? – riship89

3

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

5

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

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

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

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

Смежные вопросы