与从文件 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)
它应该可以正常工作。
我试图从 .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)
它应该可以正常工作。