仅匹配3个特定单词的字符串

时间:2018-05-31 21:12:17

标签: java regex string match

我希望正则表达式匹配只有单词A,I和D而没有任何顺序或排序的字符串

另外:如果字符串的字母不是其中任何一个,那么就不会进入if

我试过了||和其他符号,但仍然无法得到它

不必是正则表达式我只是想找到解决方法

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

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

4 个答案:

答案 0 :(得分:5)

您可以在方括号内使用包含您感兴趣的所有字符。要在方括号中匹配这些字符的一个或多个匹配项,请将+附加到其中。 message字符串应该完全由这些字符组成,以便将其视为匹配。

试试这个。

String message  = "ADAIAIAIAIAIADDDAI";
if(message .matches("[ADI]+")) {
    System.out.println("Matches");
}

答案 1 :(得分:2)

由于您正在询问"字词",我猜ADI代表的字数多于一个字母,而且是你不使用角色类[ADI]的原因。您只需添加+,因为message包含更多字词。

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

scigs的答案也有效。

答案 2 :(得分:0)

您可以使用字符串替换来执行类似的操作:

String message = "AIDDDAAIDAAA";
message = message.replace("A","")
    .replace("I","")
    .replace("D","");
if (message.equals("")) {
    //do your thing
}

答案 3 :(得分:0)

您可以检查构成字符串的每个字符:

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