2017-04-18 179 views
0

我有以下部分的代碼,其中粒度的值是塊。當我比較這些值時,它總是顯示NO。相同的字符串不等於

System.out.println(granularity); 
    System.out.println(granularity.equalsIgnoreCase("block")?"YES":"NO"); 

    if(granularity.equalsIgnoreCase("BLOCK")){..... 

下面是代碼輸出:

block 
NO 

粒度值是從屬性文件作爲

granularity = prop.getProperty("Granularity"); 

這裏是屬性文件的卡扣:

.....Granularity = block 
...... 

can somebo dy解釋了爲什麼兩個字符串不相等?

+2

有在粒度字符串的末尾的空間。在比較時使用trim()來獲取所有空白字符 –

+2

嘗試'System.out.println(「'」+ granularity +「'」);'查看不可打印的字符。 – Zorglube

+0

嘗試刪除空格。 granularity.replaceAll( 「\\ S +」, 「」)equalsIgnoreCase。( 「塊」)? 「YES」: 「否」); – Sasang

回答

4

有可能是空白混淆了比較。在開始執行此操作:從屬性文件

granularity = granularity.trim(); 
+0

這樣做,你會丟棄可能故意放在屬性開始或結束處的空白。更好的解決方案是將屬性的內容設置爲期望的值。 –

2

屬性都有其價值=

所以這之後直:

Granularity = block 

導致價值" block"。您的文件更改爲:

Granularity=block 
1

下面是代碼的輸出:

塊 NO

如果你仔細檢查你的輸出,你會發現字塊後的空白,所以它是"block " @ p-j-meisch評論編輯
您從輸入中獲得" block"。當您將其與"block"進行比較時,您會得到錯誤信息。

添加此行granularity = granularity.trim()

+1

問題是空格_before_字塊,而不是_after_ –

0

這是每次在代碼中使用trim字符串的最佳實踐,尤其是當它被用作來自用戶的輸入時。

granularity.trim().equalsIgnoreCase("block")... 

或者同時將其存儲在granularity

String granularity = someInputString.trim();