2013-03-01 36 views
0

我写了一个程序,要求输入3个字符的字符串,可以是[a,b,v,^]的组合;检查字符串是否允许使用其他值。 Java

这是我到目前为止有:

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,但循环只是继续。

我该如何解决这个问题?

谢谢。

+0

你想要'^'吗? – codeMan 2013-03-01 04:25:26

+0

是,^是允许的四个字符之一。 – 2013-03-01 04:41:40

回答

3

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

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

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

编辑:其实当它被其他字符前面^应该进行转义,如果它是在字符类(如在[\\^ABV]+)的开端,而不是。

+0

(+1)很好的答案。加入我的知识.. – asifsid88 2013-03-01 04:31:56

+0

非常感谢。这解决了我的问题。 – 2013-03-01 04:36:21

+0

1,这是更简单版本'而((expression.toUpperCase()的匹配( “[^ \\ ABV] {3}”))!);'或'甚至当((expression.matches(”! (我)[\\^ABV] {3}“)));''(我)'将正则表达式不区分大小写:) – Pshemo 2013-03-01 04:38:17

相关问题