2015-10-12 57 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',因爲衆所周知,字符類比變化速度快得多。 –

相關問題