【发布时间】:2019-03-05 00:53:50
【问题描述】:
我有一组未格式化的字符串,我需要格式化出来。我有两者的完整列表。
这是它的一个子集:
"in room" => "ROOM"
"in big room" => "BIG ROOM"
"in building" => "BUILDING"
"in street" => "STREET"
"in house" => "STANDARD"
"Room box" => "ROOM"
"Big room box"=> "BIG ROOM"
"Street box" => "STREET"
"Box" => "STANDARD"
default value => "STANDARD"
有人告诉我使用enum,这样我就没有大量的ifs,但我不确定这会有什么帮助。我的枚举看起来像这样:
public enum BoxLocation {
STANDARD("STANDARD"),
ROOM("ROOM"),
BIG_ROOM("BIG ROOM"),
...
但我不明白这将如何有助于避免大量的 if。
我应该如何将一个或多个(不超过 2 个,默认值除外)未格式化的字符串绑定到格式化的字符串,最干净的方法是什么?我在想这样的事情:
if(boxLocation.equals("in room") || boxLocation.equals("Room box"))
boxLocation = BoxLocation.ROOM;
但是,拥有一个枚举对我有什么帮助,我不能只使用它吗?
boxLocation = "ROOM";
编辑:一些格式化的值有空格,这会改变枚举。我编辑了列表。
【问题讨论】:
-
如果您的字典是字符串到字符串,请使用
Map<String, String>和标准map.get(value)消除任何 if 语句。 -
这不是你定义枚举常量的方式。请review.
-
您的枚举没有帮助,因为您没有正确实现它。我猜该计划有类似
STANDARD("in room")的东西,然后是类似public BoxLocation getFrom(String s)的方法,它查找匹配的“in room”并返回相应的枚举条目。 -
有人链接了this similar question 并删除了但它是相关的,所以我再次添加它。