两个相等的字符串在比较时返回false(Java)

时间:2017-10-26 17:21:50

标签: java string equals string-comparison

我试图从CSV文件中读取对象并比较登录,如果它是我想要的那个。这是我的if代码:

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

我可以阅读整个文件,但如果我搜索第一个用户登录,则返回false。我也尝试过:

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

在文件中,Login是第一列,在第一列&#34 ;;"之前。 控制台中的一个例子:

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

结果是:

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

有人有任何想法可能对我有帮助吗? :(

我已经在Stackoverflow上找到了它,但也失败了' false'对于leonidas:

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

@Edit:解答: 很抱歉翻译代码,因为它有一些不一致。 在de println:

之后,我已将这些代码放在代码上
    System.out.println(Arrays.toString(valor[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]

我试图" cut"字符串: value [0] = value [0] .substring(1); ,它解决了我的问题。 对不起是一个小(或这么大)愚蠢。你们真棒!)

1 个答案:

答案 0 :(得分:0)

由于您正在从文件中读取,因此我的变量值[0]中存在不可打印的字符。 使用

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

它应该可以正常工作。