带有加号字符的字符串匹配方法返回false

时间:2015-10-12 23:25:48

标签: java string if-statement

我遇到if语句错误的问题。这是代码:

if (!firstGrade.matches("A+|A|A-|B+|B|B-|C+|C|C-|D+|D|D-|F") || !firstHonors.matches("n|h|ap")) {
        System.out.println("Invalid");
        System.exit(1);
}

if语句检查firstGrade是否不等于一堆值,以及firstHonors是否不等于n,h和ap。第二部分没有问题,只是导致问题的第一次检查。

当我尝试输入带加号的值(A +,B +,C +等)时,会发现问题,它发现它无效并退出程序。但是,根据代码,情况并非如此。

2 个答案:

答案 0 :(得分:3)

+-在正则表达式中具有特殊含义,因此要将它们作为模式的一部分进行查找,您需要像以下一样转义它们:\\+

See here

答案 1 :(得分:2)

你需要转义加号,这意味着"一个或多个"在正则表达式。此外,您可以缩写您的表达式:

if (!firstGrade.matches("[ABCD][+-]?|F") || !firstHonors.matches("n|h|ap")) {

你会注意到我没有逃脱加号或减号,因为在角色类中你不需要这些角色(特殊情况时减去最后它不需要转义。

表达式[ABCD]是一个字符类,表示" A,B,C或D"中的任何单个字符。 '[+-]?表示“+-中的零或一个。

您的其他表达方式也可能会缩短(感谢@Federico建议):

if (!firstGrade.matches("[ABCD][+-]?|F") || !firstHonors.matches("[nh]|ap")) {