将字符串映射到其对应值的最佳方法

时间:2018-08-14 14:05:36

标签: java

我想编写一个将输入字符串映射到它的核心对应值的方法,例如:当我输入分隔符=“ Semicolon”时,我想将其值返回为';'。我现在正在使用开关盒:

    switch (separator) {
        case "Semicolon":
            return ';';
        case "Comma":
            return ',';
        default:
            return '-';
        }

我只想问一下,在这里除了使用switch case之外,还有没有其他解决方案具有相同的效果,但可能会缩短代码行。谢谢你!

3 个答案:

答案 0 :(得分:4)

简单的答案在于您的措辞:映射。如:

Map<String, Character> operatorsByName = new HashMap<>();
operatorsByName.put("Comma", ',');

,依此类推。或使用Java9,这是一种不错的新of()方法,可从“文字”创建地图。

然后您可以根据传入的字符串get()。另外, enum EnumSet 也可以派上用场。

答案 1 :(得分:2)

您可以使用java.util.Map来动态维护映射。

Map<String, Character> map = new HashMap<>();
map.put("Semicolon", ';');
map.put("Comma", ',');
return map.getOrDefault(separator, '-');

或者您可以使用Map.of()工厂方法:

Map<String, Character> map = Map.of("Semicolon", ';', "Comma", ',');
return map.getOrDefault(separator, '-');

答案 2 :(得分:2)

更优雅的方法是改为使用枚举:

public enum Separator {
   COMMA(","),
   SEMICOLON(";");

 private String symbol;

 Separator(String code) {
   this.symbol = code;
 } 

 public String symbol() {
    return this.symbol;
 }


}

然后您可以像这样使用它:

 String comma = Separator.COMMA.symbol();

并且建议您也可以使用:

Separator.valueOf("COMMA").symbol()

也许以这种方式,您根本不需要任何开关/外壳。 我可以想象您可以通过所需的“正确”分隔符。