更清晰的代码建议字符串操作

时间:2015-01-12 04:42:00

标签: java

所以我在代码的第6行中对if语句的逻辑进行了很多考虑。但我希望从更有经验的开发人员那里得到一些反馈。你们认为我的代码过于复杂吗?如果是这样,你们怎么会写得更简洁?

enter image description here

4 个答案:

答案 0 :(得分:8)

过于复杂?是的,你真的是: - )

我只是使用更简单的方法:

public String seeColor (String color) {
    if (color.startsWith("red")) return "red";
    if (color.startsWith("blue")) return "blue";
    return "";
}

以下完整程序显示了它的实际效果:

public class Test
{
    public static String seeColor (String color) {
        if (color.startsWith("red")) return "red";
        if (color.startsWith("blue")) return "blue";
        return "";
    }

    public static void main(String[] args) {
        String[] testData = { "redxx", "xxred", "blueTimes", "NoColor",
            "red", "re", "blu", "blue", "a", "", "xyzred" };
        for (String s: testData)
            System.out.println("[" + s + "] -> [" + seeColor(s) + "]");
    }
}

该程序的输出正如预期的那样:

[redxx] -> [red]
[xxred] -> []
[blueTimes] -> [blue]
[NoColor] -> []
[red] -> [red]
[re] -> []
[blu] -> []
[blue] -> [blue]
[a] -> []
[] -> []
[xyzred] -> []

如果您希望以后可以轻松扩展,可以选择以下内容:

public static String seeColor (String color) {
    String[] allow = {"red", "blue"};
    for (String s: allow)
        if (color.startsWith(s))
            return s;
    return "";
}

然后,向allow数组添加颜色是您需要识别它的唯一步骤。

答案 1 :(得分:2)

在我看来,你最好将你的颜色名称封装在一个流中,以便它可以轻松扩展而不必添加新的if分支:

return Stream.of("red", "blue", "green")
    .filter(colourName::startsWith).findAny().orElse("");

请注意,此解决方案依赖于Java 8流和方法引用。

答案 2 :(得分:0)

就个人而言,我认为你可以用

之类的东西来简化它
if (str != null) {
    if (str.equals("red")) return "red";
    else if (str.equals("blue")) return "blue";
}
return "";

或略微复杂的switch

if (str != null) {
    switch (str) {
    case "red":
        return "red";
    case "blue";
        return "blue";
    }
}
return "";

测试length然后执行substring()似乎执行了大量相对昂贵的String操作,对我没用。

修改

如果您只需要测试起始字符,我希望

if (str != null) {
    if (str.startsWith("red")) return "red";
    else if (str.startsWith("blue")) return "blue";
}
return "";

答案 3 :(得分:0)

正则表达式解决方案。 ^表示匹配字符串的开头。

public static String GetColor(String input) {
    String[] colors = {"red", "blue"};
    for(String color : colors) {
        if(input.matches(String.format("^%s.*", color)))
            return color;
    }
    return "";
}