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

Raf*_*res 1 java string equals string-comparison

我正在尝试从.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);
Run Code Online (Sandbox Code Playgroud)

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

if (value[0].equals(login)) 
if (value[0] == login)
Run Code Online (Sandbox Code Playgroud)

控制台中的一个例子:

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

结果是:

leonidas and leonidas = false
rafatcb and leonidas = false
davinci and leonidas = false
login and leonidas = false
Run Code Online (Sandbox Code Playgroud)

如果我比较"rafatcb"

leonidas and rafatcb = false
rafatcb and rafatcb = true   // true, as expected
Run Code Online (Sandbox Code Playgroud)

我也尝试下面的代码,但它仍然回报false"leonidas"

value[0].trim().equals(String.valueOf(login.trim()));
Run Code Online (Sandbox Code Playgroud)

正如评论中所建议的,我使用.toCharArray()以下方法打印:

System.out.println(Arrays.toString(value[0].toCharArray()));
System.out.println(Arrays.toString(login.toCharArray()));
Run Code Online (Sandbox Code Playgroud)

结果是:

[, l, e, o, n, i, d, a, s]
[l, e, o, n, i, d, a, s]
Run Code Online (Sandbox Code Playgroud)

小智 5

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

value[0].replaceAll("\0", "").equals(login)
Run Code Online (Sandbox Code Playgroud)

它应该可以正常工作。