如何在 Java 中进行多行输入

How to take multi-line input in Java

我正在尝试在 Java 中获取多行用户输入并将这些行拆分为一个 array,我需要这个来为在线裁判解决一个问题。我正在使用 Scanner 来获取输入。我无法确定输入结束。我总是得到一个无限循环,因为我不知道输入的大小(即行数)

用空字符串终止输入(点击回车)仍然是一个无限循环。下面提供了代码。

  public static void main(String[] args) {

        ArrayList<String> in = new ArrayList<String>();
        Scanner s = new Scanner(System.in);

        while (s.hasNextLine() == true){
            in.add(s.nextLine());
            //infinite loop
        }
    }

我什至不确定为什么循环第一次执行。我相信 hasNextLine() 第一次应该是假的,因为还没有输入。任何帮助或澄清表示赞赏。

您可以使用如下所示的内容结束循环。这里,字符串 "END" (case-insenstive) 用于表示 multi-line 内容的结束:

public static void main(String[] args) {

        ArrayList<String> in = new ArrayList<String>();
        Scanner s = new Scanner(System.in);

        while (s.hasNextLine()) {
            String line = s.nextLine();
            in.add(line);

            if (line != null && line.equalsIgnoreCase("END")) {
                System.out.println("Output list : " + in);
                break;
            }

        }

    }

您可以将空行用作 loop-breaker:

while (s.hasNextLine()){ //no need for "== true"
    String read = s.nextLine();
    if(read == null || read.isEmpty()){ //if the line is empty
        break;  //exit the loop
    }
    in.add(read);
    [...]
}

您可以使用此代码。它 returns 当用户在空行上按 Enter 时。

import java.util.Scanner;
import java.util.ArrayList;
public class Main {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        ArrayList<String> arrayLines = new ArrayList<>();
        String line;
        while(true){
            line = scanner.nextLine();
            if(line.equals("")){
                break;
            }
            else {
              System.out.println(line);
              arrayLines.add(line);
            }
        }
        System.out.println(arrayLines);
    }  
}

最佳

你可以这样做:

        while (s.hasNextLine() == true){
            String line = s.nextLine();
            if ("".equals(line)) {
                break;
            }
            in.add(line);
            //infinite loop
        }