Получение строки из ввода в Java

1

Я новичок в Java, и я пытаюсь получить строку из ввода с несколькими строками.

например, строка = "Быстрая коричневая лиса прыгает через ленивую собаку. Быстрая коричневая лиса прыгает через ленивую собаку. Быстрая лиса прыгает через ленивую собаку".

Быстрая коричневая лиса прыгает через ленивую собаку.

Быстрая коричневая лиса прыгает через ленивую собаку.

Быстрая коричневая лиса прыгает через ленивую собаку.

Я попытался использовать цикл while с.nextLine(), как это

String s="";
Scanner Input = new Scanner (System.in);

while(Input.hasNextLine()){
    s = s + Input.nextLine() + " ";
}

Но петля, похоже, работает бесконечно. Спасибо за любую помощь, которая может быть предоставлена.

  • 0
    Нужно иметь лучший выход, если вы нажмете Ctrl-Z, программа не сможет получить больше обработки / программа завершится. Добавьте немного System.out.printlns ... посмотрите мой второй пример, который он компилирует и может быть запущен
Теги:
string
loops
input

4 ответа

3

Вы должны нажать Ctrl + z (или Ctrl + d в UNIX), чтобы указать, что больше не будет входа.

  • 0
    Почему это было отвергнуто? Это очень правильный ответ!
  • 1
    Согласитесь, это правильный ответ, если OP запускает этот класс на консоли. Если он запускает его с файлом ( java ClassName < filename ) завершается, когда файл был прочитан.
Показать ещё 2 комментария
2

Стандартный поток ввода обычно никогда не заканчивается, если вы не указали это. Как могла ваша программа узнать, что пользователь не вводит другую строку?

Поэтому вы должны только читать строки, которые вы явно знаете, будут введены, например:

Scanner input = new Scanner(System.in);
String first = input.nextLine();
String second = input.nextLine();
input.close();
System.out.println(first);
System.out.println(second);

Если вы хотите иметь переменное количество строк, вы должны пойти с циклом while, но пользователь должен указать конец ввода, как предположил Кристиан. Как это:

Scanner input = new Scanner(System.in);
StringBuilder builder = new StringBuilder();
while (input.hasNext()) {
    builder.append(input.nextLine()).append(System.lineSeparator());
}
input.close();
System.out.println(builder.toString());

Запуск этого будет бесконечно (казалось бы). Но при нажатии CTRL-Z вы закончите ввод и input.hasNext() вернет false. (Обратите внимание, что CTRL-Z работает в Linux и Windows.)


РЕДАКТИРОВАТЬ в соответствии с комментарием Эрвина Болвидта к христианскому ответу:

Если вы перенаправляете стандартный поток ввода, чтобы он, например, читал из файла, маркер EOF (конец файла) будет указывать конец ввода на сканер. Таким образом, очевидно, что никакого взаимодействия с пользователем не происходит, и программа будет вести себя корректно.

0

добавьте счетчик переменных и увеличивайте его в каждом цикле. Если счетчик соответствует некоторым критериям, вы можете сломать; из цикла. Что-то вроде,

    String s = "";
    Scanner Input = new Scanner(System.in);
    int count = 0;

    while (Input.hasNextLine()) {
        if (count == 4) {
            break;
        } else {
            count++;
            s = s + Input.nextLine() + " ";
        }

    }
    System.out.println(s);
0

Необходимо закончить цикл по некоторым критериям, плюс ваши имена var - это 1 символ, который не является хорошим.

Ваш способ работает, нажав ctrl -Z (windows), чтобы закончить цикл, но я не думаю, что после этого можно ввести больше ввода со стандартного ввода.

    import java.util.*;
    public class ReadStrs{
        public static void main(String []args){
            String s = "";
            String readStr = "";
            StringBuilder sb = new StringBuilder();
            Scanner input = new Scanner (System.in);
            int cnt = 0;
            //while( !(readStr = input.nextLine()).equals("end"))
            System.out.println("Enter str " + cnt + " Or end to stop accepting strings");
            while(input.hasNextLine()){
                cnt++;
                readStr =input.nextLine();

                sb.append(readStr).append(" ");
                System.out.println("Enter str " + cnt + " Or end to stop accepting strings");
             }//this will go on for ever unless you have a check to break the input and start processing
             s = sb.toString();//can manipulate sb or s now
             System.out.println("Out of loop got :" + s + "---");
        }
     }

Другой способ побуждает пользователя закончить ввод, введя определенную строку:

    import java.util.*;
    public class ReadStrs{
        public static void main(String []args){
            String s = "";
            String readStr = "";
            StringBuilder sb = new StringBuilder();
            Scanner input = new Scanner (System.in);
            int cnt = 0;
            while( !(readStr = input.nextLine()).equals("end")){
                cnt++;
                System.out.println("Enter str " + cnt + " Or end to stop accepting strings");
                sb.append(readStr).append(" ");
             }//this will go on for ever unless you have a check to break the input and start processing
             s = sb.toString();//can manipulate sb or s now
        }
     }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню