2015-10-12 22 views
0

我有一个if语句错误问题。下面的代码:字符串匹配方法用加号返回false

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语句检查,如果饮用水地表水源一级不等于一堆数值,如果firstHonors不等于N,H,和AP。第二部分没有问题,这只是第一个导致问题的阶级检查。

的问题,当我尝试使用加号(A +,B +,C +等),它发现它无效并退出程序输入一个值发生。但是,根据代码,这不应该是这种情况。

+1

'字符串#matches'接受一个正则表达式。 '+'是一个特殊字符 –

+0

问题标题是WILDly误导 –

回答

2

+-在正则表达式,从而真正寻找他们作为你的模式的一部分特殊的意义,你需要躲避他们,像这样:\\+

See here

+0

这不起作用如果我这样做:''A \ +''它表示非法转义字符 – user

+1

@user在字符串文字中,'' \''是特殊的转义字符。 –

+0

@user你需要把它作为代码'“A \\ + | A | A-”'等 – Bohemian

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

'N | H | ap'也可以写为'[NH] | ap',因为众所周知,字符类比变化速度快得多。 –

相关问题