2014-11-26 5 views
-1

Попытка понять чужие коды. с использованием split()Что делает эта последовательность "\ +?" сделать в строке?

String e1 = "y=2x-5"; 
String[] t1 = e1.split("(y=)|(x\\+?)"); 

Разделяет его. 2, -5.

Я искал googled, но не смог найти объяснение для этих операторов в String. Спасибо за вашу помощь. В дополнение к перечисленным ресурсам. вот дополнительный учебник по регулярным выражениям https://docs.oracle.com/javase/tutorial/essential/regex/char_classes.html

+2

Прочтите javaadoc класса 'Pattern'. –

+1

'+' без обратной косой черты имеет особое значение в регулярных выражениях, поэтому '+' с обратным слэшем просто означает поиск символа '+'. Следующий символ '?' Означает, что символ '+' не является обязательным. Таким образом, один из разделителей, который он разделяет, это 'x', за которым следует' + '. – ajb

+0

В буквальной строке '\\' просто превращается в один символ '\'. Что было бы неинтересно, если бы не целая строка была строкой «регулярного выражения». –

ответ

1

Метод разделения в объекте String требует regular expression. В вашем коде строка (y =) | (x \ +?) Является регулярным выражением, тогда \ + означает поиск буквенного символа «+» в строке e1 и? означает, что символ «+» является необязательным (может отображаться или нет в строке e1).

0

.split() использует регулярные выражения в качестве параметра.

Если вы ищете ссылку для регулярного выражения, это объяснит, что означают операторы и как их использовать.

Вот хороший регулярное выражение тестер, который дает контекстную помощь от операторов, как вы набираете: http://regex101.com/

Что касается вашего регулярного выражения, он ломается, как это:

"(y=)|(x\\+?)" 

После обработки побега, это нарушает вниз:

(y=)|(x\+?) 

() сКАЖИТЕ регулярное выражение это match group, это означает, что мы хотим что-то возвращается, если это может быть F ound.

(y=) говорит, что соответствует любому литералу y= текст был найден.

(x\+?) говорит, что соответствует любому литералу x, за которым следует буква +. Однако ? является оператором, говоря, что предыдущий символ может появляться ноль или более раз. В основном он говорит, что если есть x, сопоставьте его и любые следующие символы +.

Поскольку вы передаете это значение split(), метод использует эти соответствия, чтобы разбить строку на компоненты.

Говорят, что разделить строку на y= или x[+[+[...]]].

В вашем случае оно разбивается на y= и x, что приводит к 2 и -5.

+0

'?' В регулярном выражении означает, что оно появляется либо в нулевом, либо в одно время. Это [дополнительный квантификатор] (http://www.regular-expressions.info/optional.html), который также может использоваться для выражения менее жадных ('pop. * Kernel' в отличие от' pop. *? Kernel '). – Makoto

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