繁体   English   中英

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

[英]String matches method with a plus character returns false

我遇到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。 第二部分没有问题,仅是导致问题的firstGrade检查。

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

+-在正则表达式中有特殊含义,因此要在模式中实际查找它们,您需要像这样对它们进行转义: \\\\+

看这里

您需要转义加号,即在正则表达式中表示“一个或多个”。 另外,您可以缩写您的表达方式:

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")) {

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM