【问题标题】:java input string with spaces带有空格的java输入字符串
【发布时间】:2016-02-23 00:07:40
【问题描述】:

我正在尝试为“问题”类型读取一些数据,该类型具有 id(int)、statement(string) 和 answer(string)。我正在使用下面的代码:

Scanner scanner = new Scanner(System.in);
System.out.print("Id (uniquely!): ");
int id = scanner.nextInt();
System.out.print("Statement : ");
String statement = scanner.next();
System.out.print("Answer:  ");
String answer = scanner.next();

如果我这样输入“你是谁?”对于“陈述”,它也不会等待为“答案”键入任何其他内容。但是,如果我不在我的声明中使用空格,它就可以正常工作。另外,如果我使用scanner.nextLine(),而不是scanner.next(),它不能正常工作;这将允许我只为statementanswer 引入一个字符串。

有人知道吗?

【问题讨论】:

  • 您能否更改您的代码以更清楚地说明“语句”和“答案”是什么?我假设 statras 但这样做对这里的非任何语言用户来说会很好。
  • 你必须使用 nextline() 方法。由于它不适合您的原因,请查看上面的链接..
  • @Thomas,抱歉,我改了
  • @Codebender,该链接中的所有解决方案都建议使用“nextLine()”,在这种情况下这对我没有多大帮助..

标签: java string input


【解决方案1】:

或者您可以在扫描原始字符串变量之前扫描一个虚拟字符串变量,如下所示:

Scanner scanner = new Scanner(System.in);
System.out.print("Id (uniquely!): ");
String k = ""; //Dummy String Variable
int id = scanner.nextInt();
System.out.print("Statement : ");
k = scanner.nextLine(); // scanning of Dummy variable
String statement = scanner.nextLine();
System.out.print("Answer:  ");
String answer = scanner.nextLine();

【讨论】:

    【解决方案2】:

    您的代码不工作的原因是:nextInt() 读取整数标记;因此,该行整数输入的最后一个换行符仍在输入缓冲区中排队,下一个 nextLine() 将读取整数行的剩余部分(为空)。

    因此,您必须执行 nextLine() 两次才能获得输出。如下图。

    Scanner scanner = new Scanner(System.in);
    System.out.print("Id (uniquely!): ");
    int id = scanner.nextInt();
    System.out.print("Statement : ");
    scanner.nextLine();
    String statement = scanner.nextLine();
    System.out.print("Answer:  ");
    String answer = scanner.nextLine();
    

    【讨论】:

      【解决方案3】:

      改为:

      String statement = scanner.nextLine();     
      String answer = scanner.nextLine();
      instead of using scanner.next();
      

      基本上,当您想尝试输入带空格的字符串时,请尝试使用scanner.nextLine() 而不是使用scanner.next()

      next() 只能读取输入直到空格。它无法读取以空格分隔的两个单词。此外,next() 在读取输入后会将光标放在同一行。

      nextLine() 读取输入,包括单词之间的空格(也就是说,它读取到行尾 \n)。读取输入后,nextLine() 将光标定位到下一行。

      【讨论】:

        【解决方案4】:

        尝试添加scanner.nextLine()。这是因为scanner.nextInt() 只读取了那个数字而不是整行,所以该行的其余部分仍然存在。而你想摆脱它,所以使用nextLine() 进入下一行。

        它可能看起来像这样:

        Scanner scanner = new Scanner(System.in);
        System.out.print("Id (unic!): ");
        int id = scanner.nextInt();
        //Consume rest of the line
        scanner.nextLine();
        System.out.print("Enunt : ");
        String stat = scanner.next();
        System.out.print("Raspuns:  ");
        String ras = scanner.next();
        

        【讨论】:

          【解决方案5】:

          这里scanner.next() 接受没有空格的令牌。你可以试试scanner.nextLine()

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-09-06
            • 1970-01-01
            • 2017-08-29
            • 1970-01-01
            • 1970-01-01
            • 2011-09-11
            • 1970-01-01
            • 2018-10-15
            相关资源
            最近更新 更多