Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Scanner类中的next()与nextLIne()_Java - Fatal编程技术网

Java Scanner类中的next()与nextLIne()

Java Scanner类中的next()与nextLIne(),java,Java,我在读一个数字,然后是一个字符串,然后比较字符串。 这很好: int num = sc.nextInt(); String S = sc.next(); if (S.equals("TEST")){ //do something } 在进行i/p say 5测试时,程序进入if部分 但是如果我用.nextLine()代替 int num = sc.nextInt(); String S = sc.nextLine(); if (S

我在读一个数字,然后是一个字符串,然后比较字符串。 这很好:

    int num = sc.nextInt();
    String S = sc.next();
    if (S.equals("TEST")){
    //do something
    }
在进行i/p say 5测试时,程序进入if部分

但是如果我用.nextLine()代替

    int num = sc.nextInt();
    String S = sc.nextLine();
    if (S.equals("TEST")){
    //do something
    }
它不起作用。对于相同的输入(5个测试),它不会执行if部分

我知道.next()一直读到第一个空格,.nextLine()一直读到遇到“\n”为止。在这里,它们都返回相同的字符串,那么这里出了什么问题

编辑:发现.nextLine()正在读取字符串和前面的空格。为什么?.nextInt()函数是否将光标返回到遇到分隔符之前的点?

很简单:
next()
使用分隔符模式返回下一个标记,默认情况下,该模式匹配空格(因此空格被消除,因为它们是分隔符),而不是
nextLine()
从当前光标位置读取到行的末尾。

是否尝试打印出
S
以查看实际值?@DanW yes,.nextLine()给出可能相关的“S”(与前面的空格一起):简言之,
next()
返回下一个不带分隔符的标记,默认情况下是一个或多个空格(
\\S+
),而
nextLine()
不关心为扫描仪设置的分隔符,它将其视为仅限分隔符的行分隔符,因此,
\u TEST
之前的空格是非分隔符,因此它被包含在结果中。通过阅读javadoc for Scanner可以回答“编辑”中的问题。