【问题标题】:String match of only 3 specific words只有 3 个特定单词的字符串匹配
【发布时间】:2018-11-10 23:19:23
【问题描述】:

我想要一个正则表达式来匹配一个只有单词 A、I 和 D 而没有任何顺序或排序的字符串

还有:如果字符串有一个字母不是这些字母,那么就不会进入 if

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

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

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

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

【问题讨论】:

  • 所有 3 个字母或任何一个? AAAAIIIDDDI 是否匹配?
  • 是的,即使只有完整的 As 也可以有效
  • 您知道AID字母,而不是单词,对吧?

标签: java regex string match


【解决方案1】:

你可以使用字符串替换来做类似的事情:

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

【讨论】:

    【解决方案2】:

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

    试试这个。

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

    【讨论】:

    • 在此处使用 charset 具有误导性 - 字符类不是字符集。此外,您可能需要添加 matches() 中的表达式应该匹配整个字符串。
    • 是的,我意识到 charset 会误导,改为字符。
    【解决方案3】:

    既然你问的是“单词”,我猜ADI 代表有多个字母的单词,这就是你不使用字符类的原因@ 987654324@。您只需添加一个+,因为message 包含更多单词。

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

    scigs 答案也可以。

    【讨论】:

    • 相当肯定(A|D|I)+ 直接等同于[ADI]+。我想不出任何可以匹配前者但不匹配后者的字符串。
    • @Vasan A、D 和我似乎是单词的占位符。
    • 明白了。是的,那是有道理的。
    • 他们不是占位符,我想要那个只有这些词的字符串
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-07-24
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 1970-01-01
      相关资源
      最近更新 更多