从Java中的输入中获取字符串

时间:2014-03-29 07:55:02

标签: java string loops input

我是Java的新手,我正在尝试从多行输入中获取字符串。

e.g。一根绳子=“快速的棕色狐狸跳过懒狗。快速的棕色狐狸跳过懒狗。快速的狐狸跳过懒狗。”来自输入,如下:

  

快速的棕色狐狸跳过懒狗。

     

快速的棕色狐狸跳过懒狗。

     

快速的棕色狐狸跳过懒狗。

我试过像这样使用带有.nextLine()的while循环

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

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

但这个循环似乎无限地运行。感谢您提供任何帮助。

4 个答案:

答案 0 :(得分:3)

你必须按 Ctrl + z (或UNIX上的 Ctrl + d )来指示那里不会有更多的投入。

答案 1 :(得分: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循环,但是用户必须指出输入的结束,正如Christian建议的那样。像那样:

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。)


根据Erwin Bolwidt对Christian的回答进行编辑:

如果要重定向标准输入流,以便例如从文件读取,则EOF标记(文件末尾)将指示扫描仪输入的结束。显然,没有涉及用户交互,程序仍然会正常运行。

答案 2 :(得分: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
        }
     }

答案 3 :(得分:0)

添加变量计数并在每次循环中递增它。如果计数符合某些条件,则可以中断;来自loop.Someething like,

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