Я хочу, чтобы регулярное выражение соответствовало строке, содержащей только слова A, I и D без какого-либо порядка или сортировки
также: если в строке есть буква, которой нет ни в одной из них, то она не входит в if
Я пробовал с || и другие символы, но все еще не могу понять
Не обязательно быть регулярным выражением, я просто пытаюсь найти способ его решить.
String message = "AIDDDAAIDAAA"
if (message.matches("(A|D|I)")){
System.out.println("Matches");
}
да даже только полный а может быть валидным
Вы ведь знаете, что A, I и D - это буквы, а не слова, верно?




Вы можете использовать замену строки, чтобы сделать что-то подобное:
String message = "AIDDDAAIDAAA";
message = message.replace("A","")
.replace("I","")
.replace("D","");
if (message.equals("")) {
//do your thing
}
Вы можете включить в квадратные скобки все интересующие вас символы. Чтобы найти одно или несколько вхождений этих символов в квадратных скобках, добавьте к нему +. Строка message должна полностью состоять только из этих символов, чтобы она считалась совпадающей.
Попробуй это.
String message = "ADAIAIAIAIAIADDDAI";
if (message .matches("[ADI]+")) {
System.out.println("Matches");
}
Использование кодировка здесь вводит в заблуждение - классы символов не являются наборами символов. Кроме того, вы можете добавить, что выражение в matches() должно соответствовать всей строке.
Да, я понял, что кодировка будет вводить в заблуждение, вместо этого изменилась на символы.
Поскольку вы спрашиваете о «словах», я полагаю, что A, D и I обозначают слова с более чем одной буквой, и это причина, по которой вы не используете класс символов [ADI]. Вам просто нужно добавить +, потому что message состоит из большего количества слов.
String message = "AIDDDAAIDAAA";
if (message.matches("(A|D|I)+")) {
System.out.println("Matches");
}
ответ scigs тоже работает.
Почти уверен, что (A|D|I)+ прямо эквивалентен [ADI]+. Я не могу придумать ни одной строки, которая соответствовала бы первой, но не последней.
@Vasan A, D и я кажемся заменителями слов.
Попался. Да, тогда это имеет смысл.
они не заполнители, я хочу, чтобы эта строка содержала только эти слова
Вы можете просто проверить каждый символ, составляющий строку:
String message = "AIDDDAAIDAAA";
boolean matches = true;
for (int i=0; i<message.length(); i++;){
if (message.charAt(i)!='A' && message.charAt(i)!='I' && message.charAt(i)!='D'){
matches = false;
break;
}
}
if (matches) System.out.println("Matches");
все 3 буквы или любые?
AAAAилиIIIDDDIбудут совпадать или нет?