0

我写了一个程序,要求用户输入一个由 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,但循环仍在继续。

我该如何解决?

谢谢。

4

1 回答 1

3

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

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

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

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

于 2013-03-01T04:26:19.853 回答