2017-09-29 57 views
0

我拉我的頭髮過什麼應該是一個簡單的問題的Java String對象.Equals無法按照預期工作

我試圖用.equals兩個String對象比較,但它們不匹配

if (folderJobNumber.toUpperCase().equals(fileJobNumber.toUpperCase())) { 
       dostuff; 
      } 

每個字符串對象被顯示爲「Y019 /」在調試 請注意,這兩個我用了子獲得按以下

String folderJobNumber = folderLocation.substring(folderLocation.length() - 5).trim(); 
String fileJobNumber = file.getName().substring(0,4) + "/".trim(); 

請參閱SCRE自己的價值enshot下面每個變量的在調試

enter image description here

我感覺的問題是該值出現使用子串之前的數據的字符數組。

三江源先進的,你可能會揭示問題

+4

旁白:'String.equalsIgnoreCase'會更好。 –

+1

System.out.println(folderJobNumber + fileJobNumber)顯示了什麼值; – notyou

+2

當你看不出兩個字符串爲什麼不相等時,通常可以查看'Arrays.toString(str.toCharArray())'的輸出。它顯示出不同字符的問題,它們看起來相同,但有不同的數字值。 –

回答

1

你可以嘗試使用equalsIgnoreCase而不是equals如果你只是想給兩個字符串比較任何光線。

if (folderJobNumber.equalsIgnoreCase(fileJobNumber)) { 
       dostuff; 
} 
+0

你*可以*;但目前尚不清楚爲什麼如果採用這種方法,它不會使用toUpperCase和equals。 –

+1

因爲兩個字符串的value.length是不同的。在這種情況下,equalsIgnoreCase方法也會失敗。 –

+0

@OrkunKoçyiğit'value.length'不用於字符串比較。 'count'是。 –

0

字符串folderJobNumber = folderLocation.substring(folderLocation.length() - 5).trim();字符串 fileJobNumber = file.getName()。substring(0,4)+「/」。trim();

而綜觀目前調試截圖,folderJobNumber是char [56],所以我認爲這是問題的所在......我不知道是如何獲得的folderLocation字符串,假設它以這種方式

char data[] = {'a', 'b', 'c'}; 
    String str = new String(data); 

我會嘗試

String folderJobNumber = folderLocation.trim().substring(folderLocation.length() - 5)