簡體   English   中英

比較兩個字符串時遇到問題

[英]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個原因,當您顯示/打印它們時,兩個看起來“看起來”相同的字符串可能會變得不相等:

  1. 如果使用==而不是equals(Object)比較字符串,則通常會得到錯誤的答案。 (這里不是問題,因為您正在使用equals方法。但是,這是一個常見問題 。)

  2. 一個字符串上出現意外的前導或結尾空格字符。 這些可以使用trim()刪除。

  3. 其他前導,尾隨或嵌入式控制字符或Unicode“ funky”字符。 例如,雜散的Unicode BOM (字節順序標記)字符。

  4. 象形文字 有許多示例,其中使用相同或實際上相同的字形在屏幕上呈現兩個或更多不同的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM