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

时间:2015-09-30 05:05:11

标签: 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.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"
}

有没有办法在不必制作26+ if / else语句的情况下编写上述语句? (我知道那里有转换案例,但你仍然需要写26个以上)。非常感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

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

在班上,创建一个HashMap。我猜一个final static就好了:

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!");
}

注意键是全部大写的。因此,当你收到这封信时,你应该把它转换成大写:

letter = message.substring(i,i+1).toUpperCase();

所以现在你可以得到要打印的信息:

String toPrint = messages.get(letter);

你可以在不制作26个开关的情况下进行打印。

上述解决方案假设您需要打印某种自定义文本。否则其他人的解决方案都很好:只需打印这封信。

答案 1 :(得分:1)

在不知道你想在if部分做什么的情况下,这是解决这个问题的最通用方法:

    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);
    }

然后你需要有这样的方法:

private void performActionA(final String message) {
    System.out.println("Test.performActionA()");
}

private void performActionB(final String message) {
    System.out.println("Test.performActionB()");
}

当然在制作中你可能想检查是否有动作,但我把它留给你。

答案 2 :(得分:0)

您可以将字母转换为字符值,然后直接检查ASCII等效字符。那么它也将是数字化的,也更容易。这样,无论您的操作是什么,都可以将其转换为ASCII格式,并且可以轻松完成。

相关问题