选择较少重复的代码或有效但重复的代码

eme*_*mer 0 java string performance duplicates

我正在尝试CodingBat中的练习.

Java> String-1> seeColor:给定一个字符串,如果字符串以"red"或"blue"开头,则返回该颜色字符串,否则返回空字符串.

我的运行代码是:

public String seeColor(String str) {
  int len = str.length();

  if (len >= 3 && str.substring(0, 3).equals("red")) {
   return str.substring(0, 3);
  } else if (len >= 4 && str.substring(0, 4).equals("blue")) {
     return str.substring(0, 4);
    }
  return "";

}
Run Code Online (Sandbox Code Playgroud)

但我在网上发现了另一个答案:

public String seeColor(String str) {
    int len = str.length();

    if(len >= 4) {
         if(str.substring(0, 4).equals("blue"))
            return "blue";
         else if(str.substring(0, 3).equals("red"))
            return "red";
        else
            return "";
    }   

    else if(len == 3) {
        if(str.substring(0, 3).equals("red"))
            return "red";
        else
            return "";
    }

    else
        return "";
}
Run Code Online (Sandbox Code Playgroud)

我的解决方案具有较少的重复代码(或者我认为).但另一种解决方案效率更高.它从大型字符串开始,仅评估最后长度为3个字符的字符串.可能这最后的解决方案更能够在未来进行简单的更改.我想读一些人的意见.谢谢.

编辑:我添加了一个道歉,我没有按照@MikeDunlavey的建议开始正确格式化我的代码.

Pet*_*rey 6

我也不愿意.我不认为第二个更有效,尽管它更复杂.两者都不必要地创建对象.

public String seeColor(String str) {
    return str.startsWith("red") ? "red" :
           str.startsWith("blue")? "blue" : "";
}
Run Code Online (Sandbox Code Playgroud)

每次调用substring它都会创建两个对象,这对于这个函数来说真的很贵.