【问题标题】:String values look the same but don't ".equals()" each other字符串值看起来相同,但彼此不“.equals()”
【发布时间】:2013-07-29 13:16:27
【问题描述】:

我正在制作一个登录屏幕。它不起作用,所以我决定显示密码(保存到文件中),并将输入的密码显示到屏幕上进行比较。

// filePassword is the password inputted from the file as a String.
// password is the String value of the EditText on the screen.
if (password.equals(filePassword))
{
    logIn();
}

我这样比较Strings

else 
{
    scr.setText("." + filePassword + "." + '\n' + "." + password + ".");
}

这是String 的比较:

我这样比较chars

else 
{
    char[] filePass = filePassword.toCharArray();
    char[] pass = password.toCharArray();
}

这是char 的比较:

每次按下按钮时,char array 的输出都会发生变化。

显然char arrays 有区别。我不知道为什么。这可能与我处理文件的方式有关吗?可能不会,考虑到它在我的项目的其他任何地方都没有发生。

有没有办法解决这种比较?对这两个值都使用.toString() 方法不起作用。

_______________________________________________________________________________________________________________________________

解决方案

if (password.equals(filePassword))

需要:

if (password.equals(filePassword.trim()))

char array 的比较总是不同的。比较它们的方法是这样的:

import java.util.Arrays; // add to top of class
scr.setText(Arrays.toString(password.toCharArray()));  
scr.append(Arrays.toString(filePassword.toCharArray()));

【问题讨论】:

  • 你能告诉我你到底想做什么吗?
  • 您看到的字符不同,因为打印的字符串 [C@???? 是数组的地址,而不是内容。要打印数组的内容,请使用Arrays.toString(...)
  • 你能贴出实际进行比较的代码吗?

标签: android string file chars


【解决方案1】:

在任何字符串中是否有多余的字符?也许回车\r?您可以在两者上使用length(),或trim(),然后进行比较。或者试试:

System.out.println(Arrays.toString(password.toCharArray()));  
System.out.println(Arrays.toString(filePassword.toCharArray()));

【讨论】:

  • 这就是我在Strings 的每一端添加句点的原因。不应有任何前导或尾随空格。
  • 还有可能。试试我刚刚添加到答案中的Arrays.toString(password.toCharArray())
  • input pass[k]file pass[k, , , , , etc.].trim() 工作。我不知道为什么file input 是这样的,但是当显示为String 时却没有这样显示,但我不在乎;你真是个天才。
猜你喜欢
  • 2016-05-22
  • 1970-01-01
  • 2022-08-16
  • 1970-01-01
  • 1970-01-01
  • 2017-07-31
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
相关资源
最近更新 更多