Java перестает читать после пустой строки

#java

#java

Вопрос:

Я делаю школьное упражнение и не могу понять, как сделать что-то одно. Для того, что я прочитал, Scanner — не лучший способ, но поскольку учитель использует только Scanner, это должно быть сделано с помощью Scanner.

В этом проблема. Пользователь вводит текст в массив. Этот массив может содержать до 10 строк, а вводимые пользователем данные заканчиваются пустой строкой.

Я сделал это:

  String[] text = new String[11]
 Scanner sc = new Scanner(System.in);
 int i = 0;
 System.out.println("Please insert text:");
 while (!sc.nextLine().equals("")){
        text[i] = sc.nextLine();
        i  ;        
    }
  

Но это не работает должным образом, и я не могу понять это.
В идеале, если пользователь вводит:

 This is line one
This is line two
  

и теперь нажмите enter, при печати массива он должен дать:

 [This is line one, This is line two, null,null,null,null,null,null,null,null,null]
  

Вы можете мне помочь?

Ответ №1:

  while (!sc.nextLine().equals("")){
        text[i] = sc.nextLine();
        i  ;        
 }
  

Это считывает две строки из вашего ввода: одну, которую он сравнивает с пустой строкой, затем другую, чтобы фактически сохранить в массиве. Вы хотите поместить строку в переменную, чтобы вы проверяли и имели дело с одним и тем же String в обоих случаях:

 while(true) {
    String nextLine = sc.nextLine();
    if ( nextLine.equals("") ) {
       break;
    }
    text[i] = nextLine;
    i  ;
}
  

Комментарии:

1. Не забывайте о максимальном вводе 10 строк в вашем while break.

Ответ №2:

Вот типичная идиома readline, применяемая к вашему коду:

 String[] text = new String[11]
Scanner sc = new Scanner(System.in);
int i = 0;
String line;
System.out.println("Please insert text:");
while (!(line = sc.nextLine()).equals("")){
    text[i] = line;
    i  ;        
}
  

Ответ №3:

Приведенный ниже код автоматически остановится, когда вы попытаетесь ввести более 10 строк без запроса OutBoundException.

 String[] text = new String[10]
Scanner sc = new Scanner(System.in);
for (int i = 0; i < 10; i  ){ //continous until 10 strings have been input. 
    System.out.println("Please insert text:");
    string s = sc.nextLine();
    if (s.equals("")) break; //if input is a empty line, stop it
    text[i] = s;
}