2017-02-17 2 views
0

Я пытаюсь разбить строку на символы "}{". Однако я получаю сообщение об ошибке:Исключение синтаксиса шаблона Scala

> val string = "{one}{two}".split("}{") 
java.util.regex.PatternSyntaxException: Illegal repetition near index 0 
}{ 
^ 

Я не пытаюсь использовать регулярное выражение или что-то еще. Я пытался использовать "\}\{", и он также не работает.

ответ

2

... Ну, причина в том, что split обрабатывает его строковый параметр как регулярное выражение.

Теперь как {, так и } являются специальными символами в регулярных выражениях.

Таким образом, вы должны пропустить специальные символы регулярных выражений мира для split «s аргумент, как это,

val string = "{one}{two}".split("\\}\\{") 
// string: Array[String] = Array({one, two}) 
0

Есть два способа заставить метасимвол быть обработаны как обычный символ:

-> перед метасимволом с обратной косой чертой.

String[] ss1 = "{one}{two}".split("[}\\{]+"); 
System.out.println(Arrays.toString(ss1)); 

output: 
[one, two] 

-> заключить его в \ Q (который начинает цитату) и \ E (который его завершает). При использовании этой техники \ Q и \ E могут быть размещены в любом месте в выражении при условии, что \ Q будет первым.

String[] ss2 = "{one}{two}".split("[}\\Q{\\E]+"); 
System.out.println(Arrays.toString(ss2)); 

output: 
[one, two] 
Смежные вопросы