我不确定字符串比较失败的原因。
我有一个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语句也不会被触发。或者,如果是,它就会失败。
正如调试会话所显示的那样,正在比较的一个变量中有一个尾随空格。
以下是可以帮助发现此类错误的列表:
- 使用调试器检查值
- 将日志记录跟踪添加到代码中,并读取它们
- 用分隔符将值括起来:
Log.d("|" + value + "|");
用于指定尾部空格 - 还记录字符串的长度
- 如果它们看起来确实相同,但不相等,则循环遍历它们的字符并打印它们的整数值。有些字符以相同的方式打印,但不相同(例如,不可破坏的空格和空格)
首先,您将参数作为Strings
接收,因此不要对它们使用toString()
方法。
就这么简单,这并没有错:
if(textView.equals(wordVar))
任何出错的地方都在代码的其他地方(区分大小写的字符串、不正确的字符串、前导或尾随空格等)