如何使用Java多行输入

时间:2019-07-04 12:00:22

标签: java java.util.scanner multiline

我正在尝试使用Java中的多行用户输入并将行分成array,我需要这样做来解决在线法官的问题。我正在使用Scanner进行输入。我无法确定输入的结尾。我总是遇到一个无限循环,因为我不知道输入的大小(即行数)

使用空字符串终止输入(单击Enter)仍然是无限循环。下面提供的代码。

  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()第一次应该是假的,因为还没有输入。任何帮助或澄清表示赞赏。

4 个答案:

答案 0 :(得分:3)

您可以使用空行作为循环中断器:

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);
    [...]
}

答案 1 :(得分:1)

您可以使用以下类似内容结束循环。此处,字符串“ END”(不区分大小写)用于表示多行内容的结尾:

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;
            }

        }

    }

答案 2 :(得分:1)

您可以使用此代码。当用户在空白行上按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);
    }  
}

最佳

答案 3 :(得分:1)

您可以执行以下操作:

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