我遇到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 +等)时,会发现问题,它发现它无效并退出程序。但是,根据代码,情况并非如此。
答案 0 :(得分:3)
+
和-
在正则表达式中具有特殊含义,因此要将它们作为模式的一部分进行查找,您需要像以下一样转义它们:\\+
答案 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")) {