如何简化我的java代码功能?

时间:2017-06-16 07:14:36

标签: java

如何简化此代码?我怀疑我的函数中有两个switch语句。

    private String getKeyword(String id) {
    String keyword = "";
    switch (id.substring(1, 2)) {
        case "E":
            keyword = "英語";
            break;
        case "M":
            keyword = "数学";
            break;
        case "W":
            keyword = "統合";
            break;
    }
    switch (id.substring(4,5)){
        case "W":
            keyword = "統合";
            break;
    }
    return keyword;
}

6 个答案:

答案 0 :(得分:2)

您只能使用if else if语句 它会不那么冗长。

此外,前一个和最后一个条件有相似之处 因此,您可以将它们与OR运算符组合在一个语句中。
两者都返回"統合"

最后,您可以直接返回值,而不是在每个匹配的情况下对局部变量进行估值 但是当第二个switch语句覆盖返回的值时, 你应该把它作为第一个测试条件。
它会让事情变得更加清晰:

private String getKeyword(String id) {

     char c  = id.substring(1, 2).charAt(0);

     if (c == 'W' || id.substring(4,5).charAt(0) ==  'W'){
        return "統合";
     }  
     else if (c == 'E'){
        return "英語";
     } 
     else if (c == 'M'){
        return "数学";
     }                    

     return "";
}

答案 1 :(得分:1)

您可以使用枚举。 它们中的每一个都包含一个或多个id以及相应的关键字:更易于阅读和维护。 最后,在Enumeration中声明一个静态方法,以根据提供的id检索预期的元素。

答案 2 :(得分:1)

    private String getKeyword(String id) {
    String keyword = "";
    switch (id.substring(1, 2)) {
        case "E":
            keyword = "英語";
            break;
        case "M":
            keyword = "数学";
            break;
        case "W":
            keyword = "統合";
            break;
    }
    if ("W".equals(id.substring(4, 5))) keyword = "統合";
    return keyword;
}

答案 3 :(得分:1)

您可以制作关键字地图并使用它。由于这是静态的,您可以将此映射设置为实例变量,并在调用该方法时使用它。

//do this in something like a constructor
Map<String, String> keywordMap = new HashMap<>;
keywordMap.put("E", "英語");
//more put calls

//and in your method, you'll only need
return keywordMap.get(id.substring(1, 2));

注意使用两个switch实现的逻辑。由于第一个开关中的匹配不会导致方法返回,因此第二个开关中的匹配可以覆盖关键字变量。

答案 4 :(得分:1)

使用地图:

private static final Map<String, String> letterToKeyword =
    Map.of("E", "英語", "M", "数学", "W", "統合");

private String getKeyword(String id) {
    if (id.substring(4,5).equals("W")) return "統合";
    return letterToKeyword.getOrDefault(id.substring(1, 2), "");
}

在Java 9构建之前,地图会更加冗长(如果需要,可以使用辅助方法辅助):

private static final Map<String, String> letterToKeyword;

static {
    Map<String, String> map = new HashMap<>();
    map.put("E", "英語");
    map.put("M", "数学");
    map.put("W", "統合");
    letterToKeyword = Collections.unmodifiableMap(map);
}

答案 5 :(得分:0)

您可以在单独的功能中移动开关的主体。

如果你想缩短它,你也可以删除中断并立即返回。

您也可以使用枚举

您的一个开关可以用简单的if语句替换。

private String getKeyword(String id) 
{
    if(id.substring(4,5).equals("W"))
    {
        return "統合";
    }
    else
    {
        switch (id.substring(1, 2)) {
            case "E":
                return "英語";
            case "M":
                return "数学";
            case "W":
                return "統合";
        }
    }

    return "";
}