【问题标题】:Check String for values other than those allowed. Java检查字符串以获取允许的值以外的值。爪哇
【发布时间】:2013-03-01 04:20:37
【问题描述】:

我写了一个程序,要求用户输入一个3个字符的字符串,可以是[a, b, v, ^]的组合;

这是我目前所拥有的:

do {
    System.out.print("Enter a two variable logical expression, no spaces: ");    // 'v' for or, '^' for and.
    expression = type.nextLine();
}
while ((expression.length() != 3) || !((expression.toUpperCase()).matches("[AB^V]")));

只有当字符串长度不是 3 个字符,或者字符串中的字符不被允许时,循环才会继续。

我输入了一个测试字符串:a^b,但循环一直在继续。

我该如何解决这个问题?

谢谢。

【问题讨论】:

  • 是的,^ 是允许的四个字符之一。

标签: java string match matching conditional


【解决方案1】:

正确的正则表达式是[AB^V]+。事实上,原始表达式只会匹配长度为 1 的字符串。

((expression.toUpperCase()).matches("[AB^V]+"))

^ 不需要转义,因为它介于 [] 之间(即在字符类中)。

编辑:实际上,如果^位于字符类的开头(如[\\^ABV]+),则应该转义,但如果它前面有其他字符,则不应该转义。

【讨论】:

  • +1 这是更简单的版本while (!(expression.toUpperCase().matches("[\\^ABV]{3}"))); 甚至while (!(expression.matches("(?i)[\\^ABV]{3}"))); (?i) 将使正则表达式不区分大小写:)
  • 哇,这很神秘,但谢谢。我总是寻求将最高级别的效率应用到我的代码中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-05-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-06
  • 1970-01-01
  • 2020-03-02
  • 2022-01-10
相关资源
最近更新 更多