繁体   English   中英

了解 Scanner 的 nextLine()、next() 和 nextInt() 方法

[英]Understanding Scanner's nextLine(), next(), and nextInt() methods

我试图了解这三种方法的工作原理。 以下是我对它们的理解:

  • nextLine()读取当前行的剩余部分,即使它是空的。
  • nextInt()读取一个整数但不读取转义序列“\n”。
  • next()读取当前行但不读取“\n”。

假设我有以下代码:

import java.util.Scanner;

public class Welcome2
{
    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Next enter two words:");

        int n; 
        String s1, s2; 

        n = keyboard.nextInt(); 
        s1 = keyboard.next(); 
        s2 =  keyboard.nextLine(); 
        System.out.println(" n is " + n + " s1 is " + s1 + " s2 is " + s2); 
    }
}

如果我的输入是:

2 

Hi 

Hello 

然后我在屏幕上得到以下输出:

n is 2 
s1 is hi 
s2 is  

为什么s1的值为“HI”?

这是否意味着即使nextInt()未读取第一行的转义字符,方法next()也会读取下一行?

nextLine() 读取当前行的剩余部分,即使它是空的。

正确的。

nextInt() 读取一个整数但不读取转义序列“\n”。

正确1

next() 读取当前行但不读取“\n”。

不正确。 事实上, next()方法读取下一个完整的标记。 这可能是也可能不是当前行的其余部分。 它可能会也可能不会消耗行尾,具体取决于行尾的位置。 javadoc 描述了准确的行为,您可能需要自己仔细阅读它才能完全理解其中的细微差别。

所以,在你的例子中:

  1. nextInt() 调用使用了2字符并将该位置留在NL处。

  2. next() 调用跳过NL ,消耗Hi ,并将光标留在第二个 NL。

  3. nextLine() 调用消耗了第二行的其余部分; NL


1 ...除了你的术语是错误的。 读取数据时,它不是转义序列。 它是一个行尾序列,可能由 CR、NL 或 CR NL 组成,具体取决于平台。 您正在谈论的转义序列在 Java 源代码中,在字符串和字符文字中。 它们可能 >> 代表 << CR 或 NL 或...其他字符。

如果你的输入是2 hello hi

nextInt() - 只需将下一个标记作为 int 读取(这里 - 它是2 )否则会出错

next() - 只需读取下一个标记,(这里 - 它是hello

nextline() - 它读取一行直到它换行(这里 - 在读取前2 hello之后,下一个;nextline 读取hi只是因为在那之后它找到了一个换行符)

如果输入是

2 

Hi 

Hello 

nextInt,next 与上述讨论相同。

在 nextline() 中,它在完成 next() 读取的输入Hi后找到换行符。 因此,nextline() 停止读取输入以获取换行符。

我试图了解这三种方法是如何工作的。 以下是我对它们的理解:

  • nextLine()读取当前行的剩余部分,即使它是空的。
  • nextInt()读取一个整数但不读取转义序列“\\n”。
  • next()读取当前行但不读取“\\n”。

假设我有以下代码:

import java.util.Scanner;

public class Welcome2
{
    public static void main(String[] args)
    {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Next enter two words:");

        int n; 
        String s1, s2; 

        n = keyboard.nextInt(); 
        s1 = keyboard.next(); 
        s2 =  keyboard.nextLine(); 
        System.out.println(" n is " + n + " s1 is " + s1 + " s2 is " + s2); 
    }
}

如果我的输入是:

2 

Hi 

Hello 

然后我在屏幕上得到以下输出:

n is 2 
s1 is hi 
s2 is  

为什么s1的值为“HI”?

这是否意味着即使nextInt()没有读取第一行的转义字符,方法next()也会读取下一行?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM