关于Java:Switter语句和字符串

Switch Statement and Strings

本问题已经有最佳答案,请猛点这里访问。

如果我让用户从屏幕上的菜单输出输入一个字符串值。如何将该输入用于switch语句?它保留了它只能用于int。例如,如果用户输入,我希望它切换到case语句并执行操作。抱歉,如果这让人困惑的话。

1
2
3
4
5
6
7
8
9
10
public static void sortData(short days[], String name[]) {
    String choice;
    Scanner kd = new Scanner(System.in);

    System.out.println("a. Sort by Name
b. Sort by Day"
);
    choice = kd.next();                       // ????????

    switch (choice) {
    case 1: {                                // ?????????


您可以为接受的选择定义一个字符串列表,并使用indexOf查找输入的内容。之后,您可以使用switch中的索引。

这样地

1
2
3
4
5
6
7
8
9
List<String> options = Arrays.asList("name","day","color","smell");
switch (options.indexOf(choice)) {
case 0: // name
    ...
case 1: // day
    ...
... // etc
default: // none of them
}

但是,使用数字是不太可读的。

另一个想法:定义一个枚举并使用valueOf(choice)。在这种情况下,对于不匹配的输入,您必须捕获一个IllegalArgumentException

1
2
3
enum Options {
    name, day, color, smell
}

然后

1
2
3
4
5
6
7
8
9
try {
    switch (Options.valueOf(choice)) {
    case name: ...
    case day: ...
    // etc
    }
} catch (IllegalArgumentException ex) {
    // none of them
}

或者,最后,您切换到Java 7;-)


据我所知,这没关系:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void sortData(short days[], String name[]) {
    char choice;
    Scanner kd = new Scanner(System.in);

    System.out.println("a. Sort by Name
b. Sort by Day"
);
    choice = kd.next().toCharArray()[0];

    switch (choice) {
    case 'a':
        // do something
        break;
    case 'b';
        // do something else
        break;
    }
}

未测试