繁体   English   中英

Java多行扫描仪输入

[英]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.

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