我在Java中使用字符串比較有點小問題,我想比較兩個字符串,並且.equals([...])
沒有給我正確的結果。字符串比較是錯的
我也試過如下:==
,.compareTo([...])
,.trim()
,.equalsIgnoreCase([...])
,創建具有默認語言環境的分頁器,並使用[collator].compare
。 (全部失效)
第一個字符串來自已經創建的對象(字符串的內容來自數據庫),第二個字符串來自新創建的對象(但已傳遞給方法) ,這個String的內容來自同一個數據庫。
我很笨,現在該做什麼,我想嘗試的最後一件事就是將它轉換爲一些數字(即十六進制)。
我已經嘗試過寫兩個字符串到控制檯和手動查找差異,但有沒有...
代碼是這樣的:
public static Lagerplatz hinzufuegen(Lagerplatz lagerplatz) {
boolean neu = true;
if (lagerplaetze.isEmpty()) {
lagerplaetze.add(lagerplatz);
System.out.println(lagerplatz.getBezeichnung() + " erstmalig hinzugefügt!");
}
for (int i = 0; i < lagerplaetze.size(); i++) {
System.out.println("'" + lagerplatz.getBezeichnung() + "'" + " - " + "'"
+ lagerplaetze.get(i).getBezeichnung() + "'");
if (lagerplatz.getBezeichnung().equalsIgnoreCase(lagerplaetze.get(i).getBezeichnung())) {
neu = false;
}
}
if (neu) {
lagerplaetze.add(lagerplatz);
System.out.println(lagerplatz.getBezeichnung() + " hinzugefügt!");
}
return lagerplatz;
}
的如果一部分與(lagerplaetze.isEmpty ())確實起作用,在添加第一個之後,它應該檢查Lagerplatz(至少是它的名稱)是否已經存在於lagerplaetze-ArrayList中,如果是,則不添加,如果不添加。
通過它步進透露,對象是正確引用...
非常感謝提前和對不起,如果這個問題已經被回答了,但我不能找到在所有這些問題一個答案幫助。 ..
EDIT1:正火不會在這種情況下幫助, 「umlaute」(德語,O或ü)不會導致問題...
的字符串轉換爲一個byte []和將這個字節數組轉換爲String:
(Arrays.toString(lagerplatz.getBezeichnung().getBytes()).equalsIgnoreCase(
Arrays.toString(lagerplaetze.get(i).getBezeichnung().getBytes())))
,然後比較它也不能解決問題,兩個字符串的字節是完全一樣的:'[72, 55, 48]' - '[72, 55, 48]'
EDIT2:這個問題是不是與字符串比較,這是因爲「Lagerplatz」類的變量是靜態的,它們在每次輸入循環時被替換... 也許刪除此問題?
您可以嘗試使用Arrays.toString(str.getBytes(java.nio.charset.StandardCharsets.UTF_16)))' – RealSkeptic 2014-12-27 18:36:04
getBezeichnung返回什麼來打印每個字符串的實際字節?代碼請。 – 2014-12-27 18:38:02
您應該能夠通過從第一個'if'的底部返回'lagerplatz'並在將'neu'設置爲'false'後添加'break'來優化一些事情。 – dasblinkenlight 2014-12-27 18:39:38