-6

我不确定为什么我的字符串比较失败。

我有一个 TextView,当用户单击一个按钮时,我正在更新它。按钮的字母出现在 TextView 中。那部分有效。

我的 TextView 上有一个 TextWatcher,它使用afterTextChanged(Editable arg0)它发送 TextView 和另一个字符串进行比较。如果比较为真,则将其发送到另一个方法。但是,无论我如何比较它们,它总是失败。

这是我尝试过的:

public void checkText(String textView, String wordVar){

    Log.d("checkText","Got the word " + textView.toString() + ". Checking against " + wordVar.toString()); //debug log to compare string values by printing them
    if(textView.toString().equals(wordVar.toString())){
        Log.d("Match","Matches, changing word"); //debug log to notify me when they match
        try {
            newWord();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 }

我还尝试了其他变体,例如这些作品中的一个textView.equals(wordVar),但都没有。textView.toString() == wordVar.toString()

我还能如何比较字符串并让它返回 true?

编辑:足够公平。LogCat 下面。

这是我的文本监听器:

textView.addTextChangedListener(new TextWatcher(){

    @Override
    public void afterTextChanged(Editable arg0) {
        check.checkWord(textView.getText().toString(), wordVar);
    }

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2,int arg3) { }
});

LogCat 输出:

07-26 21:42:20.398: D/Got(1058): Got the word B. Checking against Begin 
07-26 21:42:21.361: D/Got(1058): Got the word Be. Checking against Begin 
07-26 21:42:23.378: D/Got(1058): Got the word Beg. Checking against Begin
07-26 21:42:24.979: D/Got(1058): Got the word Begi. Checking against Begin 
07-26 21:42:25.828: D/Got(1058): Got the word Begin. Checking against Begin 

所以它们都以字符串的形式出现,但我觉得我已经尝试了对象和字符串之间可用的所有比较样式,即使它们在调试输出中匹配,if 语句也不会被触发。或者,如果是,它会失败。

4

2 回答 2

3

As the debug session showed it, there was a trailing space in one of the variables being compared.

Here's a list of things that can help spot bugs like this:

  • use a debugger to inspect the values
  • add logging traces to the code, and read them
  • surround the values by delimiters : Log.d("|" + value + "|"); to spot trailing spaces
  • also log the length of the strings
  • if they really look the same, but aren't equal, loop through their chars and print their integer values. Some chars print the same way, but aren't the same (like non-breakable spaces and spaces, for example)
于 2013-07-26T22:18:49.470 回答
1

首先,您将参数作为Strings,所以不要toString()对它们使用该方法。

就这么简单,这并没有错:

if(textView.equals(wordVar))

任何出错的地方都在代码中的其他地方(区分大小写的字符串、不正确的字符串、前导或尾随空格等)。

于 2013-07-26T21:54:28.997 回答