比较两个相等的字符串但得到不正确的结果

时间:2016-08-29 13:59:49

标签: java android string

所以我需要将我的字符串与用户在EditText中输入的字符串进行比较。 我输入相同的字符串,但Java认为这是两个不同的字符串。 我检查了空格,但没有找到它们。

private void checkEditTexts(){
    ...
    String userAnswer = editTextAnswer.getText().toString().toLowerCase();
    String rightAnswer = getResources().getString(R.string.question3_answer1).toLowerCase();

    Log.v("checkET.userAnswer", "userAnswer = [" + userAnswer + "] rightAnswer = [" + rightAnswer + "]"  );

    if(userAnswer == rightAnswer) {
        points++;
        Log.v("checkEditTexts()", "POINTS++: " + points);
    }else{
        points--;
        Log.v("checkEditTexts()", "POINTS--: " + points);

    }
    ...
}

logcat的:

08-29 16:47:27.494 16583-16583/....V/checkET.userAnswer: userAnswer = [song 2] rightAnswer = [song 2]

08-29 16:47:27.494 16583-16583/... V/checkEditTexts(): POINTS--: 2

08-29 16:47:27.494 16583-16583/....V/checkEditTexts(): POINTS--: 1

08-29 16:47:27.494 16583-16583/....V/checkEditTexts(): POINTS: 1

你可以看到 userAnswer rightAnswer 是相同的,它应该执行points++,而是points--

抱歉英语不好。

4 个答案:

答案 0 :(得分:2)

使用equelsequalsIgnoreCase==比较引用类型而不是值。但是equelsequalsIgnoreCase会检查值而不是引用。

if(userAnswer.equalsIgnoreCase(rightAnswer)) {
points++;
    Log.v("checkEditTexts()", "POINTS++: " + points);
}else{
    points--;
    Log.v("checkEditTexts()", "POINTS--: " + points);

}

答案 1 :(得分:1)

在比较字符串时不应使用==。

if(userAnswer.equals(rightAnswer)){//因为你做了toLowerCase你可以使用equals而不是equalsIgnoreCase

答案 2 :(得分:1)

if语句中使用equals方法进行字符串比较,因为在Java中,当==运算符用于比较2个对象时,它会检查对象是否引用到记忆中的同一个地方。

像这样修改你的if

...
if(userAnswer.equals(rightAnswer)) {
   points++;
   Log.v("checkEditTexts()", "POINTS++: " + points);
}
...

答案 3 :(得分:0)

试试这个

if (userAnswer.equalsIgnoreCase (rightAnswer)) {
    points++;
    Log.v("checkEditTexts()", "POINTS++: " + points);
}else{
    points--;
    Log.v("checkEditTexts()", "POINTS--: " + points);

}