理解Java中的扫描器
我试图理解java中的Scanner类,在一些示例中,我对下面两个程序的理解不明确,在逻辑上我看不到任何区别,但输出告诉我缺少了一些东西。请帮我做这个理解Java中的扫描器,java,java.util.scanner,Java,Java.util.scanner,我试图理解java中的Scanner类,在一些示例中,我对下面两个程序的理解不明确,在逻辑上我看不到任何区别,但输出告诉我缺少了一些东西。请帮我做这个 public static void main(String args[]) { Scanner scanner1=new Scanner(System.in); String s=scanner1.nextLine(); scanner1.close(); // create a
public static void main(String args[]) {
Scanner scanner1=new Scanner(System.in);
String s=scanner1.nextLine();
scanner1.close();
// create a new scanner with the specified String Object
Scanner scanner = new Scanner(s);
// print the next line
System.out.println("" + scanner.nextLine());
// check if there is a next line again
System.out.println("" + scanner.hasNextLine());
// print the next line
System.out.println("" + scanner.nextLine());
// check if there is a next line again
System.out.println("" + scanner.hasNextLine());
// close the scanner
scanner.close();
}
上面的程序正在打印下面的输出
Hello World! \n 3+3.0=6
Hello World! \n 3+3.0=6
false
而下面的程序,我看不出与上面有任何区别,是显示不同的输出
public static void main(String[] args) {
String s="Hello World! \n 3 + 3.0 = 6";
// create a new scanner with the specified String Object
Scanner scanner = new Scanner(s);
// print the next line
System.out.println("" + scanner.nextLine());
// check if there is a next line again
System.out.println("" + scanner.hasNextLine());
// print the next line
System.out.println("" + scanner.nextLine());
// check if there is a next line again
System.out.println("" + scanner.hasNextLine());
// close the scanner
scanner.close();
}
上述程序的输出为
Hello World!
true
3 + 3.0 = 6
false
我假设您在第一个代码片段中键入的是
helloworld\n 3+3.0=6
到标准输入。在这种情况下,“\n”不会被解析为新行(它被解析为字符“\”后跟字符“n”)。您必须在键入“Hello World!”后按enter按钮,以便扫描仪将输入分成两行
另一方面,当扫描仪从字符串中获取输入时,“\n”将被视为新行字符
哦,看来你的第一个片段中有一个拼写错误。我假设您使用的扫描仪从
系统中获取输入。
(您可能将两个代码片段的代码混淆了)。如果在文件中写入了\n,则无法使用nextLine()[使用两个反斜杠,它将为您提供java.util.NoSuchElementException,因为没有\n(行尾)但是有\n(两个反斜杠)。
要读取文件并将文本中的\n替换为实际的EOL,可以使用sc.useDelimiter(\\n)作为新行,但这样可能会破坏扫描仪的某些方法的功能
Scanner s = new Scanner("Hello World! \\n 3 + 3.0 = 6");
s.useDelimiter("\\\\n");
System.out.println(s.next());
System.out.println(s.next());
将为您提供如下输出:
Hello World!
3 + 3.0 = 6
在第一个示例中,您使用的是
scanner1
,然后才是scanner
。这是打字错误吗?在第一个示例中,我使用了两个scanner对象,一个是scanner 1,用于存储来自键盘的输入字符串,然后使用scanner对其进行解析。在第二个示例中,我直接在程序中硬编码输入字符串,而不是在运行时给出它(如第一个示例中)