Проверьте, содержит ли строка только определенные повторяющиеся специальные символы - PullRequest
4 голосов
/ 04 апреля 2019

У меня есть строка формата ^%^%^%^%. Мне нужно проверить, не содержит ли строка ничего, кроме повторяющихся шаблонов ^%

Например

1. ^%^%^%^% > Valid

2. ^%^%aa^%^% > Invalid

3. ^%^%^%^%^%^% > Valid

4. ^%^%^^%^% > Invalid

5. %^%^%^%^% > Invalid

Как мне это сделать на Java?

Я пытался:

String text = "^%^%^%^%^%";
if (Pattern.matches(("[\\^\\%]+"), text)==true) {
    System.out.println("Valid");
} else {
    System.out.println("Invalid");
}

Однако, это дает мне Valid для случаев 4 и 5.

Ответы [ 4 ]

3 голосов
/ 04 апреля 2019

В вашем шаблоне вы используете класс символов , который соответствует только 1 из перечисленных символов, а затем повторяет это более 1 раза.

Вы можете использовать это ^ для привязки начала строки и окончания с $ для подтверждения конца строки.

Затем повторите 1+ раз, сопоставляя \\^%

^(?:\\^%)+$

Regex demo

2 голосов
/ 04 апреля 2019

Вы можете просто сделать:

if (str.replace("^%", "").isEmpty()) {
    …
}

Метод replace заменяет строку как можно чаще, поэтому он соответствует именно тому, что вам нужно.

Также соответствует пустой строке, которая, согласно спецификации, «не содержит ничего, кроме этого шаблона». В подобных случаях вы всегда должны спрашивать, подразумевается ли также пустая строка.

2 голосов
/ 04 апреля 2019

Попробуйте этот шаблон ^(?:\^%)+$

Объяснение:

^ - совпадение начала строки

(?:...) - группа без захвата

\^% - совпадение ^% буквально

(?:\^%)+ - совпадение ^% один или несколько раз

$ - совпадение конца строки

Демо

0 голосов
/ 04 апреля 2019
String[] text = {"^%^%^%^%","^%^%aa^%^%","^%^%^%^%^%^%","^%^%^^%^%","%^%^%^%^%" };
for (String t: text) {
    if(Pattern.matches(("[\\^\\%]+[a-z]*[a-z]*[(\\^\\%)]+"), t)==true) {
            System.out.println("Valid");
    } else {
            System.out.println("Invalid");
    }

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...