比较两个字符串不起作用

时间:2017-01-20 00:44:15

标签: java android string

我是android studio的初学者。我正在开发一个测验应用程序。应用程序应检查要比较的两个字符串并给出正确的答案。但比较两个字符串(即使它们是相同的)并没有给出正确的输出。相反,它直接转到代码中的最终return语句。这是代码:

// ...
EditText Answer1 = (EditText) findViewById(R.id.answer1);
String ans = Answer1.getText().toString();
Log.v("MainActivity", "City name :" + ans);
String answer= String.valueOf(Answer1);
// ...

public String YourAnswers(String ans, boolean isDT, boolean isHC, boolean isBO,String answer) {

    String Message = "1.:You answered  \n"+ans+  "\n"    +ques1(answer);
    Message = Message + "  \n 2.:  \n" +question2(isDT,isHC,isBO) ;
    return Message;
}

public String ques1(String answer) {
    if (answer == "Jefferson City"){//||ans=="Jeff City"||ans=="Jeffcity"||ans=="Jeffersoncity"){
        return "correct";
    }
    else if(answer =="Jeff City") {
        return "correct.";
    }
    else if(answer =="Jeffcity"){
        return "correct..";
    }
    else if(answer.equals("Jeffersoncity")){
        return "correct.....";
    }

    return "Sorry,but the correct ans is Jefferson City";
}

当它进入ques1()时,它会直接转到最后一个语句,即return "Sorry,but the correct ans is Jefferson City";。当我输入正确的答案时,它将返回上述行。

关于为什么会发生这种情况的任何想法?

4 个答案:

答案 0 :(得分:5)

" =="不是在java中比较String内容的正确方法。

使用string1.equals(string2)

答案 1 :(得分:1)

始终使用.equals()代替==

但请尝试使用此代码,以便answer使用toLowerCase()进行任何大写:

import java.util.Arrays;

...
...

String[] answers = {"jefferson city","jeff city", "jeffcity", "jeffersoncity"};
if(Arrays.asList(answers).contains(answer.toLowerCase())) {
  return "Correct";
} else {
  return "Sorry,but the correct ans is Jefferson City";
}

答案 2 :(得分:1)

背景

为了比较Java中的两个字符串,有两种常用方法。在您的示例中,您使用==而不是使用其中一个,而不是equality operator - 这些,您不能用来检查String上的相等性。

您可能使用的第一个方法是equals,位于String。这将检查并查看String包含的所有字符是否完全相同 - 也就是说,它还会确保您提供的String具有与"Hello, world!".equals("Hello, world!"); // ‘equals’ returns true "Hello, world!".equalsIgnoreCase("hello, world!"); // ‘equals’ returns false 相同的String你要比较它。

以下是一个例子:

true

您可以使用的第二方法是letter case,也位于String上。如果"Hello, world!".equals("Hello, world!"); // ‘equals’ returns true "Hello, world!".equalsIgnoreCase("hello, world!"); // ‘equals’ returns true 的比较相同,则会返回public String ques1(String answer) { if (answer.equals("Jefferson City")) { return "correct"; } else if(answer.equals("Jeff City")) { return "correct."; } else if(answer.equals("Jeffcity")) { return "correct.."; } else if(answer.equals("Jeffersoncity")) { return "correct....."; } return "Sorry,but the correct ans is Jefferson City"; } ,但如果它们属于不同的情况则不予考虑 - 它不关心。

让我们重复上一个例子,看看会发生什么:

{

这次看看两者是如何回归真实的?

解决方案

考虑到这一切,我们可以继续修改您的代码:

android:key

这会很棒!

此外

我将@+id/放在新行上并不会影响程序的结果。然而,equalsIgnoreCase为什么你想把它们放在不同的行上。我写这篇文章的原因是因为我非常喜欢再次提起辩论 - 让人们发疯。

答案 3 :(得分:0)

如果不区分大小写,请在字符串上使用.equalsIgnoreCase。另外,为避免nullpointer异常,请使用以下语法

“Jeff City”.equals(stringVar);