Как сделать многострочный ввод в Java - PullRequest
1 голос
/ 04 июля 2019

Я пытаюсь взять многострочный пользовательский ввод в 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() должен быть ложным в первый раз, так как не было получено никаких данных. Любая помощь или разъяснения приветствуются.

Ответы [ 4 ]

3 голосов
/ 04 июля 2019

Вы можете использовать пустую строку в качестве прерывателя цикла:

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 голос
/ 04 июля 2019

Вы можете сделать что-то вроде этого:

        while (s.hasNextLine() == true){
            String line = s.nextLine();
            if ("".equals(line)) {
                break;
            }
            in.add(line);
            //infinite loop
        }
1 голос
/ 04 июля 2019

Вы можете использовать этот код. Возвращается, когда пользователь нажимает 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);
    }  
}

Лучший * * 1005

1 голос
/ 04 июля 2019

Вы можете закончить цикл чем-то вроде ниже. Здесь строка «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;
            }

        }

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...