Java 文本消息缩写解码器:NoTouchElementException

Java 文本消息缩写解码器:NoTouchElementException,java,java.util.scanner,nosuchelementexception,Java,Java.util.scanner,Nosuchelementexception,我需要帮助开发我的短信缩写解码器,我正试图把它们放在一起。程序的第一部分应该这样做:“如果用户的输入字符串与已知的文本消息缩写匹配,则输出未修改的形式,否则输出:未知。支持两个缩写:LOL——大声大笑,IDK——我不知道。”然后:“展开并解码这些缩写。BFF——永远的好朋友,依我和TMI的拙见——信息太多了 这是我目前掌握的代码: import java.util.Scanner; public class TextMsgAbbreviation { public static voi

我需要帮助开发我的短信缩写解码器,我正试图把它们放在一起。程序的第一部分应该这样做:“如果用户的输入字符串与已知的文本消息缩写匹配,则输出未修改的形式,否则输出:未知。支持两个缩写:LOL——大声大笑,IDK——我不知道。”然后:“展开并解码这些缩写。BFF——永远的好朋友,依我和TMI的拙见——信息太多了

这是我目前掌握的代码:

import java.util.Scanner;

public class TextMsgAbbreviation {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);

        String textMsg = "";
        {
            String BFF = "best friends forever";
            String IMHO = "in my humble opinion";
            String TMI = "too much information";
            String LOL = "laughing out loud";
            String IDK = "i don't care";

            System.out.println("Input an abbreviation:" + " ");

            textMsg = input.next();

            if (textMsg.compareTo("LOL") == 0) {
                System.out.println(LOL);
            } else if (textMsg.compareTo("IDK") == 0) {
                System.out.println(IDK);
            } else if (textMsg.compareTo("BFF") == 0) {
                System.out.println(BFF);
            } else if (textMsg.compareTo("IMHO") == 0) {
            }
        }
    }
}
这是我得到的输出:

线程“main”java.util.NoSuchElementException中的异常 位于java.util.Scanner.throwFor(Scanner.java:862) 下一步(Scanner.java:1371) 位于TextMsgAbbreviation.main(TextMsgAbbreviation.java:17) 我做错了什么?

根据,当没有更多可读取的令牌时,
next()
方法抛出一个
NoTouchElementException
。因此,建议在调用
Scanner
类中的
next()
方法之前调用
hasNext()
方法,以确保有可读取的令牌。因此,请尝试以下方法:

if(input.hasNext()) {
    textMsg = input.next();
}
另一方面,从Java7开始,
switch
语句可以接受
String
输入,因此您可以尝试在代码中使用它。在我个人看来,它将比使用多个if-else循环更具可读性。 例如:

    switch(textMsg) {
        case "LOL" : System.out.println(LOL);
                     break;
        case "IDK" : System.out.println(IDK);
                     break;
        case "BFF" : System.out.println(BFF);
                     break;
        case "IMHO": System.out.println(IMHO);
                      break;
        default    : System.out.println("Unknown");
   }

我也是Java新手,但我想你可能有太多的花括号了?你检查过了吗?你的代码对我来说运行得很好,在这种情况下你就出现了错误?在这种情况下,一个
NoTouchElementException
表示没有来自
系统的输入。在
中-你如何向程序提供输入?也许你关闭了
系统。在
中-我以前遇到过这种情况,但在你的代码中似乎不是这样