【问题标题】:How to check that a string contains characters other than those specified. (in Java) [closed]如何检查字符串是否包含指定字符以外的字符。 (在 Java 中)[关闭]
【发布时间】:2013-03-01 03:50:15
【问题描述】:

我有一个程序要求用户输入三个字符串。字符串只能是 a、b 或 c 的组合。

如何在不执行一百万条条件语句的情况下检查字符串是否包含指定字符以外的任何其他字符。

伪例子:

String s = "abq"

if (s.containsOtherCharacterThan(a,b,c))
    System.exit(-1)

【问题讨论】:

  • 使用正则表达式来实现。
  • 这不是一个真正的问题吗?这正是我想要的

标签: java regex string


【解决方案1】:

要查找不是 a、b 或 c 的字符,请使用以下内容:

if(!s.matches("[abc]+"))
{
    System.out.println("The string you entered has some incorrect characters");
}

【讨论】:

  • 实际上你是正则表达式,它似乎失败了。 System.out.println("abq".matches("[^abc]")); 给了我false,它应该给我true
  • @Indigenuity - System.out.println("abq".matches("[^abc]+")); 仍然提供false。我不想听起来很邪恶,但由于这个答案已被接受,你最好提出一个可行的解决方案,因为其他人可能会提到它。我建议您在 IDE 中运行代码并从那里粘贴。
  • @R.J - 更改了您给出的表达式的答案
  • @J.L.Louis - 检查更新的答案 - 您已接受。这是正确的版本;)
【解决方案2】:

您可以使用正则表达式及其character classes。只需在要检查的字符串上调用String#matches(String regex) 是否可以完全被正则表达式匹配。

if (!s.matches("[abc]+")) {//..

这个测试应该只通过包含[]中指定的其他字符的字符串,所以"abq"应该通过它,因为它包含q。匹配将检查s 是否仅包含abc 字符。如果不是,它将返回false,并且由于否定,我们将进入 if 块。

【讨论】:

  • 我不是最擅长正则表达式,但我认为这只会告诉你是否没有字符是允许的字符。
  • @Indigenuity 是对的 - 正则表达式会通过失败的示例 abq
  • 我的立场是正确的。你是对的
  • @Pshemo:您说“匹配将检查 s 是否仅包含 a、b 和 c 字符”,但这不是您的模式要检查的内容。也许您想说^[abc]+$ 之类的东西,它测试整个字符串,但如上所述,.matches() 方法将为abq 返回真,因为该模式将成功匹配字符串的ab 部分。
  • @Stobor 匹配默认检查整个字符串,所以 ^ $ 在这种情况下是不必要的。 System.out.println("abq".matches("[abc]+")) 打印 false
【解决方案3】:

您可以将字符串拆分为一个数组,然后从那里循环输入,您可以比较每个字符。

public boolean containsOtherCharacter(String s, String a, String b, String c) {
    String[] st = s.split("");
    for(int x = 0; x < st.length; x++)
        if (st[x].compareTo(a) != 0 && st[x].compareTo(b) != 0 && st[x].compareTo(c) != 0)
            return true;
    return false;
}

这会告诉你是否还有其他字符。如果您想知道它们是哪些字符,您可以将每个字符插入到 HashMap 中,其中键是字符,值是使用次数。

【讨论】:

    【解决方案4】:

    你可以使用这个正则表达式:-[abc]+

    【讨论】:

    • 那个正则表达式会通过他失败的测试用例abq
    • 我真的很怀疑。 abq 与模式 [abc]+ 不匹配。
    • [abc]+ 将匹配来自abqab,因此"abq".match("[abc]+") 将返回true 编辑我已更正。你是对的
    • 是的 - 模式 [abc]+ 表示“任何字母 a、b 或 c,1 次或多次”,它将匹配 abqab 部分。
    • 首先,String 类中没有match 方法。其次,只有在我的 IDE 中试用了它们之后,我才发布了它。为了您的方便,请尝试运行此代码,看看您会得到什么。 System.out.println("abq".matches("[abc]+"));
    【解决方案5】:

    没有正则表达式的一种方法是遍历字符串并检查每个字符,如果字符不是 a、b 或 c,则退出。仅使用 String.contains 是无法做到的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 2019-03-16
      • 2017-09-23
      相关资源
      最近更新 更多