Java 检查用户输入中的字母时,避免使用26个if/elseif/else语句

Java 检查用户输入中的字母时,避免使用26个if/elseif/else语句,java,if-statement,code-cleanup,Java,If Statement,Code Cleanup,我只是想知道是否有一种简单的方法来检查用户输入的字母值。比如说, Scanner scanner = new Scanner(System.in); String message = scanner.nextLine(); String letter; int length = message.length(); for (int i=0; i < length; i++) { letter = message.substring(i, i+1); if (letter.e

我只是想知道是否有一种简单的方法来检查用户输入的字母值。比如说,

Scanner scanner = new Scanner(System.in);
String message = scanner.nextLine();
String letter;
int length = message.length();
for (int i=0; i < length; i++) {
    letter = message.substring(i, i+1);
    if (letter.equalsIgnoreCase("a")) {
        System.out.println("letter a");
        // Of course the real program won't just print out "letter a" but this is
        // to show that all actions are different
    } else if(letter.equalsIgnoreCase("b") {
        System.out.println("letter b");
    } // etc... for all of the possible values of "letter"
}
Scanner Scanner=新的扫描仪(System.in);
字符串消息=scanner.nextLine();
字符串字母;
int length=message.length();
for(int i=0;i

有没有办法写上面的语句而不必写26+个if/else语句?(我知道有switch case,但你仍然需要写26+个)。非常感谢您的帮助!

您可以将字母转换为字符值,然后直接检查ASCII等效值。这样,它也将是数字的,更简单。通过这种方式,无论您的操作如何,都可以将其转换为ASCII格式,并且很容易完成。

在不知道您想在if部分做什么的情况下,这是最简单的方法eric解决此问题的方法:

    final Map<String, Consumer<String>> actions = new HashMap<>();
    actions.put("a", this::performActionA);
    actions.put("b", this::performActionB);

    final Scanner scanner = new Scanner(System.in);
    final String message = scanner.nextLine();
    String letter;
    final int length = message.length();
    for (int i = 0; i < length; i++) {
        letter = message.substring(i, i + 1);
        actions.get(letter).accept(message);
    }

当然,在制作过程中,您可能想检查是否有动作,但我将此留给您。

根据注释,您只是根据字母打印不同的文本。在这种情况下,Tim使用地图的想法非常好。我将向您展示一个基本示例:


在您的类中,创建一个
HashMap
。我猜一个
最终的
静态的
就可以了:

private static final HashMap<String, String> messages = new HashMap<String, String>();
static {
    messages.put("A", "Hello!");
    messages.put("B", "Again!");
    messages.put("C", "Etc etc!");
}
因此,现在您可以通过以下操作获取要打印的消息:

String toPrint = messages.get(letter);
你可以直接打印出来,不需要做26个开关



上述解决方案假设您需要打印某种自定义文本。否则,其他解决方案也可以:只需打印信函。

这取决于“做点什么”和“做点别的”,不是吗?如果你必须做26件不同的事情,那么你有26段不同的代码,那么你认为你可以消除什么?如果你向我们展示
If else
块中的业务逻辑,那么也许我们可以找到一种简化事情的方法。是的。谢谢你的澄清,安德烈亚斯-说我必须做一个不同的操作对于每个字母(比如可能打印出不同的字符串)。我不太确定,我只是想问是否有办法使代码更简洁。@dumpong我们需要看看其中的一些“操作”你说。你有26种方法吗?你可以初始化一个
Map
,其中键是字母表中的26个字母,值是消息。然后只需通过用户的输入访问该
Map
。对不起,如果我是这里的新手,但如何实现这一点?@dumpong我需要更详细的信息n关于您的程序,因为您在上面的代码片段中所做的只是打印字符串的每个字母,而不是其他。非常感谢。它还修复了我之前没有提到的一些格式问题。100%。+1
letter = message.substring(i,i+1).toUpperCase();
String toPrint = messages.get(letter);