检查字符串中允许的值以外的值。JAVA

检查字符串中允许的值以外的值。JAVA,java,string,match,matching,conditional,Java,String,Match,Matching,Conditional,我编写了一个程序,要求用户输入一个由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) || !((ex

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

我该如何解决这个问题


谢谢。

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

((expression.toUpperCase()).matches("[AB^V]+"))
^
不需要转义,因为它介于
[
]
之间(即在字符类中)


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

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

((expression.toUpperCase()).matches("[AB^V]+"))
^
不需要转义,因为它介于
[
]
之间(即在字符类中)


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

+1这是更简单的版本
,而(!(expression.toupercase().matches([\^ABV]{3}))
甚至
while(!(expression.matches((?i)[\\^ABV]{3}”)
(?i)
将使正则表达式不区分大小写:)哇,这很神秘,但谢谢。我总是寻求对我的代码应用最高级别的效率。+1,这是一个更简单的版本
,而(!(expression.toUpperCase().matches(“[\^ABV]{3}”)
甚至
while(!(expression.matches((?i)[\\^ABV]{3}”)
(?i)
将使正则表达式不区分大小写:)哇,这很神秘,但谢谢。我始终寻求对代码应用最高级别的效率。是,^是允许的四个字符之一。是,^是允许的四个字符之一。