为什么在使用带有next()和nextLine()的扫描仪读取2个看似相同的字符串时,我得到equals()== false?

时间:2013-06-11 14:59:02

标签: java string

我正在制作一个基本的计算器。当我尝试比较字符串并使用next()时,它可以正常工作,但是如果我使用nextLine(),它就不起作用。怎么会这样?不是nextnextLine几乎是一样的,只是一个跳过一行而另一个没有?

这是我的代码:

import java.util.Scanner;

class apples{

    public static void main(String args[]){

        Scanner Max = new Scanner(System.in);

        int num1, num2, answer;
        String plumi;

        System.out.println("enter your first number");
        num1 = Max.nextInt();
        System.out.println("enter your second number");
        num2 = Max.nextInt();
        System.out.println("enter if you want to use plus or minus");
        plumi = Max.next();
        if(plumi.equals("plus")){
            answer = num1 + num2;
            System.out.println("the answer is " + answer);
        }
        if(plumi.equals("minus")){
            answer = num1 - num2;
            System.out.println("the answer is " + answer);
        }

    }
}

4 个答案:

答案 0 :(得分:3)

他们不一样。

next()nextInt()方法首先跳过与分隔符模式匹配的任何输入,然后尝试返回下一个标记。 nextLine()方法返回当前行的其余部分。

例如,如果输入为"123\nplus\n",则对nextInt()的调用将消耗123,让\n等待。

此时,对next()的调用将跳过\n,然后使用plus,最后\n等待。或者,对nextLine()的调用将使用\n并返回一个空字符串作为该行,让plus\n等待。

如果您希望在使用nextLine()next()之后使用nextInt(),则应回答nextLine()以清除剩余的换行符

答案 1 :(得分:1)

尝试使用此代码代替您的代码:

if(plumi.equals("plus")){
    answer = num1 + num2;
    System.out.println("the answer is " + answer);
}
else if(plumi.equals("minus")){
    answer = num1 - num2;
    System.out.println("the answer is " + answer);
}
else {
    System.out.println(plumi);
}

然后尝试按照输入:

1 //press enter
2 plus //press enter

看看会发生什么,你会明白的。

答案 2 :(得分:0)

一个人工作而另一个不工作的原因是......好吧,他们不是一回事。它们都存在于略有不同的用例中。

比较next()nextLine() - nextLine()期待一个行分隔符终止,我认为你的输入没有。但是,文档注释表明即使没有终止行分隔符也应该可以工作,因此您必须进行调试才能找到它为您打破的具体原因。

答案 3 :(得分:-1)

乍一看,您的代码应该可行。要了解它为什么不起作用,您必须对其进行调试。如果您不知道如何使用调试器,请使用“穷人的调试器”:

System.out.println("enter if you want to use plus or minus");
plumi = Max.next();
System.out.println("You entered ["+plumi+"]"); // poor man's debugger

我引用[]的值,因为它们很少是我要打印的值的一部分,它可以更容易地看到何时有其他意外的空格(如[ plumi][plumi ]