![](/img/trans.png)
[英]problem of the class Scanner in java when Input an integer and multiline string
[英]Java multiline scanner input
我对Scanner
及其从System.in
进行输入的方式存在特定问题。
我想做什么:我需要读取System.in
提供的单个输入。 问题在于此输入可以有多行(输入可以有许多\\n
字符)。
我试过的
我尝试过的显而易见的事情是Scanner.nextLine()
方法,但是,当然,这不会读取所有数据。 我尝试的下一件事情是:
Scanner sc = new Scanner(System.in);
List<String> data = new ArrayList<>();
while(sc.hasNextLine()){
String line = sc.nextLine();
if(line.isEmpty()){
break;
}
data.add(line);
}
但是,这也会跳过很多数据-例如,当给定文本中间出现空行时。
我还试图消除break;
声明,并希望while(sc.hasNextLine())
循环会自行中断,但这不会发生,因为扫描程序将等待数据。
可以用Java完成吗? 谢谢你的时间
如果在OS X上按Command + D或在Windows上按Control + D,则将插入行尾字符。
当扫描程序到达行尾字符时, hasNextLine
将返回false,并且循环将终止。
因此,删除此:
if(line.isEmpty()){
break;
}
并在多行输入之后输入行尾字符。
或者,如果允许的话,您可以将输入内容作为字符串放入扫描仪。 例如,如果要输入此输入:
Hello World
This is a
Multiline
input
您可以像这样初始化扫描仪:
Scanner line = new Scanner("Hello World\n" +
"This is a\n" +
"Multiline\n" +
"input");
或者,您可以将输入内容放入文件中,然后让扫描仪读取:
Scanner line = new Scanner(new File("path to your input file"));
使用此类型进行阅读
String read = "";
Scanner sc = new Scanner(System.in);
String line;
while (sc.hasNextLine()) {
line = sc.nextLine();
if (line.isEmpty()) {
break;
}
read += line + "\n";
}
System.out.println(read);
在这里,首先我们检查是否存在下一行。 如果是,则使用sc.nextLine()方法读取数据;如果读取的数据为空,则中断循环。
如果您想将所有输入多行读取到字符串列表中,每输入一行一个元素,那么用户将必须指出输入何时结束。 这通常通过使用文件结尾字符来完成:在Windows命令提示符下为Ctrl-Z,在Linux,OS X和所有平台上的IntelliJ IDE输入窗口中为Ctrl-D。
您可以使用以下代码读取各行:
Scanner sc = new Scanner(System.in);
List<String> data = sc.tokens().collect(Collectors.toList());
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.