Я знаю, что этот вопрос задавали раньше, однако решения, которые я нашел, не работают для меня. Я пишу простую программу, в которой один из методов принимает пользовательский ввод и проверяет, содержит ли он какие-либо символы, кроме букв (например, числа или специальные символы). Мое первое решение выглядит так:
public boolean charFinder(String inputString) {
Pattern p = Pattern.compile("\\W", Pattern.CASE_INSENSITIVE);
Pattern p2 = Pattern.compile("0-9", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inputString);
Matcher m2 = p2.matcher(inputString);
return m.find() || m2.find();
}
И это прекрасно работает, но я хочу сделать его более элегантным. Итак, я попробовал это:
public boolean charFinder(String inputString) {
Pattern p = Pattern.compile("\\W | \\d", Pattern.CASE_INSENSITIVE);
Matcher m = p.matcher(inputString);
return m.find();
}
И это не работает. Правильно ли я объединил регулярные выражения?




Удалите пробелы в "\\W | \\d", иначе они будут рассматриваться как часть шаблона, который вы пытаетесь сопоставить:
Pattern p = Pattern.compile("\\W|\\d", Pattern.CASE_INSENSITIVE);
Также обратите внимание, что Pattern.CASE_INSENSITIVE здесь не имеет значения, потому что \W уже нечувствителен к регистру и \d в любом случае не соответствует буквам.
@novice Рад помочь! Пожалуйста, не забудьте поставить галочку слева, чтобы принять ответ.
Все готово, приношу извинения, я не часто использую stackoverflow. Также спасибо за проверку опечаток и грамматики. Всего наилучшего!
Если вы ищете что-то, что не является буквой, вы можете использовать:
[^a-zA-Z](или с опцией без учета регистра,[^a-z]). Если вам также нужно разрешить символы с диакритическими знаками, этот подход сложнее (и вам придется решить, нужны ли вам все символы с диакритическими знаками или какое-то их подмножество). Здесь есть полезная информация: reexegg.com/regex-interesting-character-classes.html