#java #regex
#java #регулярное выражение
Вопрос:
Я проверяю приоритет в строке в моей функции. Есть ли способ изменить мой код для включения регулярных выражений — я совершенно не знаком с регулярными выражениями, и хотя я прочитал несколько руководств в Интернете, все еще не слишком хорошо понимаю «это». Так что любое руководство было бы действительно оценено.
Например, в строке XLYZ, если символ после X не равен L или C, печатается оператор ‘нарушение’. Вот приведенный ниже код:
if (subtnString[cnt]=='X' amp;amp; cnt 1<subtnString.length){
if(subtnString[cnt 1]!= 'L' || subtnString[cnt 1]!= 'C'){
System.out.println("Violation: X can be subtracted from L and C only");
return false;
}
}
Есть ли способ, которым я могу использовать регулярное выражение для замены этого кода?
Ответ №1:
Вы можете использовать что-то вроде этого:
Pattern regex = Pattern.compile("^X[LC]");
Matcher regexMatcher = regex.matcher(subjectString);
if(regexMatcher.find() ) { // it matched!
}
else { // nasty message
}
В демо-версии посмотрите, какие строки совпадают.
Объяснение
^
Привязка утверждает, что мы находимся в начале строкиX
соответствует литералуX
[LC]
это символьный класс, который соответствует либо одномуL
, либо одномуC
Ссылка
Комментарии:
1. Учитывая эти объяснения, XLYZ не соответствует регулярному выражению.
2. Отличный ответ! Единственное, что я хотел бы добавить, это то, что вам следует ознакомиться с документацией по строкам в Java . Вы можете просмотреть все методы, которые он предоставляет для работы со строками.
3. @zx81 да, мы сопоставляем всю строку целиком.
4. @JBNizet исправлено. Спасибо, что поняли это. 🙂
5. @DustinE. Спасибо за предложение! Добавлено. 🙂
Ответ №2:
для сопоставления текстов, нарушающих ваше правило, используйте это регулярное выражение:
X[^LC]
смотрите демонстрацию
и для сопоставления регулярных выражений, которые не нарушают ваше правило, используйте это:
X[LC]
смотрите демонстрацию