如何在while循环中读取带有空格的字符串(Java)

Posted

技术标签:

【中文标题】如何在while循环中读取带有空格的字符串(Java)【英文标题】:How to read Strings with spaces inside while loop (Java) 【发布时间】:2012-11-23 00:03:53 【问题描述】:

这总是让我头疼。我正在尝试在 while 循环中读取和保存字段“名称”和“疾病”的多字字符串。这是我的代码:

while(OR1.isFull() == false || OR2.isFull() == false)

    // prompt for next request
    System.out.println("Enter patient info:");

    // read patient info
    System.out.print("Name: ");
    String name = input.nextLine();
    input.nextLine();
    System.out.print("Malady: ");
    String malady = input.nextLine();
    input.nextLine();
    System.out.print("Priority: ");
    int priority = input.nextInt();

    // store patient info
    Patient patient = new Patient(name, malady, priority);

    OR1.add(patient);

 // end while

System.out.println("List of patients scheduled for Operating Room 1");
while(OR1.isEmpty() == false)

    // pop and print root
    System.out.print(OR1.remove());

这是我的控制台输入和输出的样子:

输入患者信息: 姓名:约翰·多伊 疾病:臀部骨折

优先级:6

安排在 1 号手术室的患者名单 患者:疾病:髋部骨折优先级:6

// 结束控制台输出。

请注意,它没有记录我为“姓名”输入的值,并且在获得“Malady”后它提示输入额外的一行(需要我再次按回车以获取下一个输入, "优先级")。

我已阅读http://docs.oracle.com/javase/6/docs/api/java/util/Scanner.html 的文档。我尝试过 next() 和 nextLine() 的不同组合。我就是不明白。

通过将代码更改为以下代码解决了问题:

        // read patient info
        System.out.print("Name: ");
        input.nextLine();
        String name = input.nextLine();
        System.out.print("Malady: ");
        String malady = input.nextLine();
        System.out.print("Priority: ");
        int priority = input.nextInt();

虽然我仍然对这个愚蠢的扫描仪的工作原理感到困惑 =/

【问题讨论】:

你如何在Patient类中设置name 对此我不太确定,但 input.nextLine() 会读取缓冲区中的最后一个字符或字符串。 【参考方案1】:

我相信它应该只适用于:

// read patient info
System.out.println("Name: ");
String name = input.nextLine();
System.out.println("Malady: ");
String malady = input.nextLine();
System.out.println("Priority: ");
int priority = input.nextInt();

也许问题出在 Patient 构造函数之类的?

【讨论】:

已修复! Seee OP(由于我的代表很低,因此无法在发布后 8 小时内回答我自己的问题)。【参考方案2】:

通过将代码更改为以下代码解决了问题:

    // read patient info
    System.out.print("Name: ");
    input.nextLine();
    String name = input.nextLine();
    System.out.print("Malady: ");
    String malady = input.nextLine();
    System.out.print("Priority: ");
    int priority = input.nextInt();

【讨论】:

以上是关于如何在while循环中读取带有空格的字符串(Java)的主要内容,如果未能解决你的问题,请参考以下文章

Shell while循环语句中的陷阱

while read line 与for循环的区别

在使用读取(bash)的while循环中禁用用户输入

带有字符串而不是整数的 while 循环

如何在微控制器按钮上使while循环更快?

如何使用扫描仪在java中将输入作为带有空格的字符串