有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java比较两个字符串不起作用

我是安卓 studio的初学者。我正在开发一个测验应用程序。应用程序应该检查要比较的两个字符串,并给出正确答案。但是比较两个字符串(即使它们相同)并不能给出正确的输出。相反,它直接进入代码中的最终返回语句。代码如下:

// ...
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) 个答案

  1. # 1 楼答案

    在整个过程中使用.equals()而不是==

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

    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. # 2 楼答案

    “==”不是比较java中字符串内容的正确方法

    使用string1。等于(string2)

  3. # 3 楼答案

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

    “杰夫城”。等于(stringVar)

  4. # 4 楼答案

    背景

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

    您可以使用的第一个方法是^{},位于String上。这将检查String所包含的所有字符是否完全相同,也就是说,它还将确保所给的String与所比较的letter case相同

    下面是一个例子:

    "Hello, world!".equals("Hello, world!"); // ‘equals’ returns true
    "Hello, world!".equalsIgnoreCase("hello, world!"); // ‘equals’ returns false
    

    您可以使用的第二个方法是^{},也位于String上。如果比较的String相同,则返回true,但如果它们属于不同的情况,则不考虑,这不重要

    让我们重复前面的示例,看看会发生什么:

    "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";
    }
    

    那会有用的,太好了

    而且

    我把{放在新行上不会影响程序的结果。然而,关于为什么要将它们放在单独的行中,还有一些疑问。我之所以写这篇文章,是因为我非常喜欢再次提起辩论,让人们发疯