[英]Having problem when comparing two strings
我正在使用Java閱讀CSV文件。 在文件內部,每一行都采用以下格式:
operation, start, end.
我需要對不同的輸入執行不同的操作。 但是,當我嘗試比較兩個字符串時,發生了一些奇怪的事情。
我用等於來比較兩個字符串。 其中一個操作是“添加”,但是我從文檔中提取的第一個元素總是給我錯誤的答案。 我知道這是一個“添加”,我將其打印出來看起來像一個“添加”,但是當我使用operation.equals("add")
,它是false
。 對於所有其他字符串,除了第一個字符串之外,其他都是正確的。 CSV文件中的第一行有什么特別之處嗎?
這是我的代碼:
while ((line = br.readLine()) != null) {
String[] data = line.split(",");
String operation = data[0];
int start = Integer.parseInt(data[1]);
int end = Integer.parseInt(data[2]);
System.out.println(operation + " " + start + " " + end);
System.out.println(operation.equals("add"));
例如,它打印出添加1 3否添加4 6真我真的不知道為什么。 這兩個添加看起來完全一樣。
這是我的csv文件的樣子: 在此處輸入圖片描述
有(至少)4個原因,當您顯示/打印它們時,兩個看起來“看起來”相同的字符串可能會變得不相等:
如果使用==
而不是equals(Object)
比較字符串,則通常會得到錯誤的答案。 (這里不是問題,因為您正在使用equals
方法。但是,這是一個常見問題 。)
一個字符串上出現意外的前導或結尾空格字符。 這些可以使用trim()
刪除。
其他前導,尾隨或嵌入式控制字符或Unicode“ funky”字符。 例如,雜散的Unicode BOM (字節順序標記)字符。
象形文字 。 有許多示例,其中使用相同或實際上相同的字形在屏幕上呈現兩個或更多不同的Unicode代碼點。
情況3和4只能通過使用跟蹤記錄或調試器來檢查兩個字符串中的長度和char
值來可靠地檢測到。
(CSV文件的屏幕截圖無法幫助我們進行診斷!將CSV文件剪切並粘貼可能會有所幫助。)
您應該從第一個元素中刪除雙引號,然后使用equals方法進行檢查。
嘗試這個:
String operation = operation.substring(1, to.length() - 1);
operation.equals("add")
希望對你有效。
看起來您的圖像線條看起來不錯。 我想在這種情況下,您可能會設置錯誤的文檔編碼。 例如,當您不輸入UTF時,則在開頭有特殊的標頭。 這可能是原因,您不正確地讀了第一個單詞。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.