(Java) 在带有空行的 Switch Case 中退出 While 循环

(Java) Exiting While Loop In Switch Case With Empty Line

简单解释一下,我应该让用户输入 消息的收件人,然后让他们进入消息正文,这可以 有多条线。如果他们输入一个空行,则消息正文结束并且 他们可以 select 切换另一个案例。

case 'S':
case 's':
    if(user.equals(" ")) {
        System.out.println("No user logged in.");
    } else {
        System.out.println("Recipient: ");
        recip = menuScan.next();

        m = new Message(user,recip);

        System.out.println("Enter message. Blank line to quit.");
        mbody = menuScan.nextLine();

        while(!mbody.equals("")) {
            mbody = menuScan.next();
            m.append(mbody);
        }

        ms.deliver(m);

        System.out.println("Messgae sent.");

    }
    break;

但是就像现在一样,while 循环被完全跳过了。我试过将 recip 更改为 menuScan.nextLine(),将 mbody 更改为 menuScan.next().nextLine(),但唯一发生的另一件事是消息正文永远持续下去.

我也尝试过为 recipmbody 使用两个不同的 Scanner 对象,但也没有成功。

我试过你的这段代码

      System.out.println("Enter message. Blank line to quit.");
      mbody = menuScan.nextLine();

      while (!mbody.equals("")) {
           mbody = menuScan.next();
           m.append(mbody);
      }

稍微改变一下

      System.out.println("Enter message. Blank line to quit.");
      mbody = menuScan.nextLine();

      while (!mbody.equals("")) {
           m.append(mbody);
           mbody = menuScan.nextLine();          
      }

这样循环就按预期执行和退出了。 我用过java.util.Scanner

您应该将 next 替换为 nextLinenext,如文档所述,returns 下一个标记,如果它匹配从指定字符串构造的模式 ,这不是您想要的。

尝试以下操作:

System.out.println("Recipient: ");
recip = menuScan.nextLine();

m = new Message(user,recip);

System.out.println("Enter message. Blank line to quit.");
mbody = menuScan.nextLine();

while(!mbody.equals("")) {
    m.append(mbody);
    mbody = menuScan.nextLine();
}

ms.deliver(m);

System.out.println("Messgae sent.");