与从文件 returns 读取的字符串进行比较 false 即使它们看起来相同

Comparison with string read from file returns false even when they look the same

我试图从 .csv 文件中读取一个字符串(由 ; 分隔),然后将第一列与 login 字符串进行比较。这是我的代码:

FileReader file = new FileReader("MyCSV.csv");
BufferedReader entry = new BufferedReader(file);
String row;
row = entry.readLine();
do {
    String[] value = row.split(";");
    if (login.equals(value[0])) {   // login is passed as an argument to his function
         // do something
    }
    row = entry.readLine();
} while (row != null);

我可以阅读整个文件,但无法搜索第一个用户注册。 login 比较总是 returns false 到第一个。我试过了:

if (value[0].equals(login)) 
if (value[0] == login)

控制台中的示例:

// I've put this inside `do while`
System.out.println(value[0] + " and " + login + " = " + login.equals(value[0]));

结果是:

leonidas and leonidas = false
rafatcb and leonidas = false
davinci and leonidas = false
login and leonidas = false

如果我比较"rafatcb"

leonidas and rafatcb = false
rafatcb and rafatcb = true   // true, as expected

我也尝试了下面的代码,但它仍然是 returns false for "leonidas":

value[0].trim().equals(String.valueOf(login.trim()));

根据评论中的建议,我使用 .toCharArray():

进行打印
System.out.println(Arrays.toString(value[0].toCharArray()));
System.out.println(Arrays.toString(login.toCharArray()));

结果是:

[, l, e, o, n, i, d, a, s]
[l, e, o, n, i, d, a, s]

由于您正在读取文件,因此您的变量 value[0] 中可能包含不可打印的字符。您可以按如下方式替换它们

value[0].replaceAll("[=10=]", "").equals(login)

它应该可以正常工作。