字符串比较失败Java

时间:2013-07-26 21:49:22

标签: java android string

我不确定为什么我的String比较失败。

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

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

以下是我的尝试:

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 

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

2 个答案:

答案 0 :(得分:3)

正如调试会话所示,在其中一个变量中有一个尾随空格。

以下列出了可以帮助发现此类错误的内容:

  • 使用调试器检查值
  • 将日志记录跟踪添加到代码中,然后阅读它们
  • 通过分隔符围绕值:Log.d("|" + value + "|");以发现尾随空格
  • 还记录字符串的长度
  • 如果它们看起来真的相同,但不相等,则遍历它们的字符并打印它们的整数值。有些字符以相同的方式打印,但不一样(例如不可破坏的空格和空格)

答案 1 :(得分:1)

首先,您将参数设为Strings,因此请勿对其使用toString()方法。

这很简单,这没有错:

if(textView.equals(wordVar))

出现问题的是代码中的其他地方(区分大小写的字符串,不正确的字符串,前导或尾随空格等)。