【问题标题】:Choice between less duplicate code or efficient but duplicate code在较少重复的代码或高效但重复的代码之间进行选择
【发布时间】:2016-01-22 18:50:00
【问题描述】:

我正在尝试 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 "";

}

但我在网上找到了另一个答案:

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 "";
}

我的解决方案中重复的代码更少(或者这就是我的想法)。 但另一种解决方案看起来更有效。它从大字符串开始,只评估最后长度为 3 个字符的字符串。可能最后一个解决方案在未来更容易进行更改。 我想阅读某人的意见。谢谢。

已编辑:我表示歉意,我一开始没有按照@MikeDunlavey 的建议正确格式化我的代码。

【问题讨论】:

    标签: java string performance duplicates


    【解决方案1】:

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

    public String seeColor(String str) {
        return str.startsWith("red") ? "red" :
               str.startsWith("blue")? "blue" : "";
    }
    

    每次调用 substring 时都会创建两个对象,这对于该函数所做的工作来说非常昂贵。

    【讨论】:

    • 是的,这是一个臭名昭著的改进。我会牢记避免对象重复,并寻找其他方法,例如startsWith。感谢您的友好回答,这是我的第一个问题。
    • @EMER:还请注意,彼得的答案经过仔细格式化,既可以缩进,以便您可以看到里面的内容,也可以用于间距,因此相关的东西直接位于彼此的上方和下方。经验丰富的程序员知道,在查看代码是否正确或需要更改代码时,对细节的关注确实很有帮助。
    • @MikeDunlavey 谢谢,我修好了。这是一个有意识的错误,我不确定它是如何在这个站点的代码块中工作的。但我不知道在哪里剪长的陈述,我发现你的建议把相关的东西放在上面和下面非常有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多