next()
和 nextLine()
的主要区别是什么?我的主要目标是使用
Scanner
来读取所有文本,它可以与任何源(例如文件)进行“连接”。
我应该选择哪一个并为什么?
next()
和 nextLine()
的主要区别是什么?Scanner
来读取所有文本,它可以与任何源(例如文件)进行“连接”。
我应该选择哪一个并为什么?
我总是更喜欢使用 nextLine()
读取输入,然后解析字符串。
使用 next()
只会返回分隔符(默认为空格)之前的内容。而 nextLine()
则会在返回当前行后自动将扫描器向下移动。
从 nextLine()
解析数据的一个有用工具是 str.split("\\s+")
。
String data = scanner.nextLine();
String[] pieces = data.split("\\s+");
// Parse the pieces
有关Scanner类或String类的更多信息,请参阅以下链接。
Scanner:http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html
String:http://docs.oracle.com/javase/7/docs/api/java/lang/String.html
BufferedReader
逐行读取呢?我不明白为什么Scanner
这么流行。 - David Conradnext()
只能读取输入直到空格,无法读取由空格分隔的两个单词。此外,在读取输入后,next()
将光标放在同一行。
nextLine()
会读取包括单词之间的空格在内的所有输入(即,它会读取直到行末的 \n
)。读取完输入后,nextLine()
会将光标定位在下一行。
如果要读取整行,可以使用 nextLine()
。
来自JavaDoc:
Scanner
使用分界符模式将其输入拆分为标记,默认情况下匹配空格。next()
:查找并返回此扫描器的下一个完整标记。nextLine()
:将此扫描器推进到当前行以及返回跳过的输入。
因此,在"small example<eol>text"
的情况下,next()
应返回"small",nextLine()
应返回"small example"。
next()
函数不会在返回的标记中包含 \n
? - rooni关键点在于找出调用方法后,方法将停止在哪里以及光标将停留在哪里。
所有方法都会读取信息,该信息不包括光标位置和下一个默认定界符(空格、制表符、\n——通过按Enter键创建)之间的空格。光标在定界符之前停止,除了nextLine()
,它会读取光标位置和\n之间(包括由定界符创建的空格)的信息,光标停在\n后面。
例如,请考虑以下说明:
|23_24_25_26_27\n
|
-> 当前光标位置
_
-> 空格
stream -> 加粗(由调用方法获得的信息)
当您调用这些方法时,会发生什么?
nextInt()
读取 23|_24_25_26_27\n
nextDouble()
阅读 23_24|_25_26_27\n
next()
读取23_24_25|_26_27\n
nextLine()
read 23_24_25_26_27\n|
完成后,应根据您的需求调用该方法。
我注意到除了next()只扫描空格以外,nextLine()会扫描整行,next会等待直到获取完整的标记,而nextLine()不会等待完整的标记,只要获取到'\n'(即按下回车键)扫描器光标移动到下一行并返回跳过的上一行。它不检查您是否已经提供了完整的输入,甚至可以接受空字符串,而next()则不能接受空字符串。
public class ScannerTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cases = sc.nextInt();
String []str = new String[cases];
for(int i=0;i<cases;i++){
str[i]=sc.next();
}
}
}
通过更改for循环中的next()和nextLine()函数来尝试这个程序,在没有任何输入的情况下继续按'\n'即回车键,你会发现使用nextLine()方法会在按下指定数量的案例后终止,而next()函数不会终止,除非你为给定数量的案例提供了输入。
next()
如何在实践中运作,它会忽略回车键,而 nextLine()
则将其作为完整输入接受,并且如果您回显被捕获的值,则将其复制到控制台。我只是在 str[i]=sc.next();
或 str[i]=sc.nextLine();
下面新增了一行 System.out.println(str[i]);
。 - Pablo Adamesnext()和nextLine()方法与Scanner相关,用于获取字符串输入。他们的区别是...
next()只能读取输入直到空格,无法读取由空格分隔的两个单词。此外,next()在读取输入后将光标定位在同一行。
nextLine()会读取包括单词之间的空格(即读取至行尾\n)。一旦读取完输入,nextLine()会将光标定位在下一行。
import java.util.Scanner;
public class temp
{
public static void main(String arg[])
{
Scanner sc=new Scanner(System.in);
System.out.println("enter string for c");
String c=sc.next();
System.out.println("c is "+c);
System.out.println("enter string for d");
String d=sc.next();
System.out.println("d is "+d);
}
}
输出:
输入字符串 c:
abc def
c 是 abc
输入字符串 d:
d 是 def
如果您使用 nextLine() 而不是 next(),那么
输出:
输入字符串 c:
ABC DEF
c 是 ABC DEF
输入字符串 d:
GHI
d 是 GHI
Scanner in = new Scanner(System.in);
int t = in.nextInt();
String[] s = new String[t];
for (int i = 0; i < t; i++) {
s[i] = in.next();
}
Scanner in = new Scanner(System.in);
int t = in.nextInt();
String[] s = new String[t];
for (int i = 0; i < t; i++) {
s[i] = in.nextLine();
}
如果在提示符上输入以下内容-
abcd abcd
输出结果如下:
abcd abcd
如果在提示符上输入以下内容
abcd(如果你按回车键输入另一行中的下一个abcd,输入提示符将直接退出,并且你将得到输出)
输出结果如下:
abcd
来自Java文档
next():如果下一个标记与从指定字符串构造的模式匹配,则返回下一个标记。
nextLine():将此扫描器推进到当前行末尾并返回跳过的输入。
选择哪个方法取决于您的需求。如果我要读取整个文件,我会使用nextLine直到读完整个文件。
这两个函数都用于移动到下一个扫描器标记。
区别在于扫描器标记的生成方式
next() 使用分隔符 空格 生成扫描器标记
nextLine() 使用分隔符 '\n'(即按 Enter 键)生成扫描器标记