【问题标题】:String equals() doesn't work字符串等于()不起作用
【发布时间】:2014-10-09 14:47:44
【问题描述】:

这是一个我已经尝试修复了 3 个小时的问题。 该应用程序的工作原理: 我有一个 txt 文件中的数字列表(在资产中)。我正在逐行读取该 txt 文件,并将 TextView 的文本设置为当前行。现在我必须在 EditText 中输入相同的数字。但是如果我比较 EditText 和当前行,应用程序会说它们不一样,尽管它们是。


我有一个不同编号的资产文件,如下所示:

3
9
8
14
[finish]

[finish] 标签将在稍后使用,以便我可以完成应用程序,但现在完全没有必要。


我已经定义了以下字符串和视图:

public String curval;
public EditText etds;
public TextView curvalte;

我的 onCreate() 方法的一部分:

etds = (EditText)findViewById(R.id.editText1);
buttonds = (Button)findViewById(R.id.button1);
curvalte = (TextView)findViewById(R.id.textView2);
try {
    inds = this.getAssets().open(assetname);
} catch (IOException e) {
    e.printStackTrace();
}
readerds = new BufferedReader(new InputStreamReader(inds));

现在我正在从文件中读取并将其设置为 curvalte 的文本:

curval = readerds.readLine();
curvalte.setText(curval);

而且效果很好。 但是您必须在 EditText 中键入现在在 curvalte 中显示的相同数字。 如果我尝试使用 curval 对 EditText 中的文本使用 equals(),它总是说 EditText.getText().toString 不等于 curval

if(etds.getText().toString().equals(curval.toString()){
    // The code here
}else{
    // This is what I get
    Toast.makeText(getBaseContext(), "Wrong answer!", Toast.LENGTH_LONG).show();
}

即使我输入了正确的答案,我也会得到那个吐司说它是错误的。 删除 .toString() 并没有解决它,我不知道我可以尝试什么。


也许是因为字符串实际上包含一个数字?

【问题讨论】:

  • 为什么是etds.getText().toString() 而不是etds.getText()
  • 改为尝试使用 etds.getText().toString().equals(curvalte.getText().toString()) 看看,取决于你什么时候打电话
  • @Jashaszun getText 返回 Editable 而不是字符串。
  • 您是否尝试记录字符串,只是为了确认它们是相同的?也许你应该使用strip()
  • @Tom 哦,那没关系。 (我通常不使用 Android。)

标签: java android string integer equals


【解决方案1】:

尝试将这两个值都打印出来并查看它们。你甚至可能没有从文件中得到正确的值,或者你得到了一些奇怪的格式字符,比如“\n”

【讨论】:

  • 首先,感谢您的回答。我已经检查了这两个值,它们肯定是相同的。
【解决方案2】:

用 .trim() 试试这个,有时这就是问题

if(etds.getText().toString().trim().equals(curval.toString().trim()){
    // The code here
}else{
    // This is what I get
    Toast.makeText(getBaseContext(), "Wrong answer!", Toast.LENGTH_LONG).show();
}

【讨论】:

  • 感谢您的回答,但这也没有解决问题。
【解决方案3】:

好的,我发现了问题。这是资产文件的格式! cp1252编码修复了它。

【讨论】:

  • 您应该改用 UTF-8。
  • 嗯,Cp1252 一直是默认编码,我从来没有遇到过问题。发生这种情况是因为我使用使用不同编码的 Notepad++ 创建了文件。
【解决方案4】:

也许你的字符串中有空格或者大写和小写之间的区别。试试这个版本:

    if(etds.getText().toString().trim().toLowerCase().equals(curval.toString().trim().toLowerCase())){
        Log.i("Yes", "equal");
    } else {
        Log.i("NO", "not equal");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    相关资源
    最近更新 更多