我想编写一个将输入字符串映射到它的核心对应值的方法,例如:当我输入分隔符=“ Semicolon”时,我想将其值返回为';'。我现在正在使用开关盒:
switch (separator) {
case "Semicolon":
return ';';
case "Comma":
return ',';
default:
return '-';
}
我只想问一下,在这里除了使用switch case之外,还有没有其他解决方案具有相同的效果,但可能会缩短代码行。谢谢你!
答案 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()
也许以这种方式,您根本不需要任何开关/外壳。 我可以想象您可以通过所需的“正确”分隔符。