Строковое совпадение только 3 определенных слов

Я хочу, чтобы регулярное выражение соответствовало строке, содержащей только слова A, I и D без какого-либо порядка или сортировки

также: если в строке есть буква, которой нет ни в одной из них, то она не входит в if

Я пробовал с || и другие символы, но все еще не могу понять

Не обязательно быть регулярным выражением, я просто пытаюсь найти способ его решить.

String message = "AIDDDAAIDAAA"
if (message.matches("(A|D|I)")){

         System.out.println("Matches");
}

все 3 буквы или любые? AAAA или IIIDDDI будут совпадать или нет?

Eugene 31.05.2018 23:17

да даже только полный а может быть валидным

Felipe Cardona 31.05.2018 23:19

Вы ведь знаете, что A, I и D - это буквы, а не слова, верно?

Andreas 31.05.2018 23:44
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
64
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы можете использовать замену строки, чтобы сделать что-то подобное:

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() должно соответствовать всей строке.

Vasan 31.05.2018 23:23

Да, я понял, что кодировка будет вводить в заблуждение, вместо этого изменилась на символы.

srikanta 31.05.2018 23:26

Поскольку вы спрашиваете о «словах», я полагаю, что A, D и I обозначают слова с более чем одной буквой, и это причина, по которой вы не используете класс символов [ADI]. Вам просто нужно добавить +, потому что message состоит из большего количества слов.

    String message = "AIDDDAAIDAAA";
    if (message.matches("(A|D|I)+")) {
        System.out.println("Matches");
    }

ответ scigs тоже работает.

Почти уверен, что (A|D|I)+ прямо эквивалентен [ADI]+. Я не могу придумать ни одной строки, которая соответствовала бы первой, но не последней.

Vasan 31.05.2018 23:31

@Vasan A, D и я кажемся заменителями слов.

steffen 31.05.2018 23:32

Попался. Да, тогда это имеет смысл.

Vasan 31.05.2018 23:33

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

Felipe Cardona 01.06.2018 00:49

Вы можете просто проверить каждый символ, составляющий строку:

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");

Другие вопросы по теме