【问题标题】:Code optimization with if condition check along with replaceAll使用 if 条件检查和 replaceAll 进行代码优化
【发布时间】:2013-03-16 01:46:50
【问题描述】:

我有一个字符串,我必须在其中检查一些 if 条件并执行一些替换操作,如下所示,

for(int i =0; i<10;i++){
    if(name[i].contains("sometext")){
       name[i] = name[i].replaceAll("someregexpattern","replacementtexthere");
    }
}

我不是每次使用'if'条件都检查'sometext'是否存在,我可以简单地说如下,

for(int i =0; i<10;i++){
       name[i] = name[i].replaceAll("someregexpattern","replacementtexthere");
}

无论如何,如果字符串 'name' 不包含 'regexpattern' 的意思,它不会替换任何东西。那么,if 条件在性能方面是否有任何意义。

提前致谢。

【问题讨论】:

  • 这可能取决于 if 条件为真的频率(假设 .contains.replaceAll 便宜)。我认为,您最好针对您的特定用例进行测试。
  • replaceall 应该是 replaceAll。你的代码正在编译?
  • @Achintya Jha - 那是一个错字。已更正。谢谢:)

标签: java string if-statement replace


【解决方案1】:

仅当sometextsomeregexpattern 相同时才有效。否则,if 条件确实很重要。

假设您的someregexpattern 确实存在于字符串中,但您的if 条件评估为false,在这种情况下,您不应该进行替换。但是如果你去掉if语句,那么就会发生替换,这不太一样。

例如:- 帮助您更好地理解。

String testCondition = "dontReplace";
        String myString = "Hi, I'm SO";
        String regex = "SO";
        String replacement = "Not SO";

        if(myString.contains(testCondition)){
            myString = myString.replaceAll(regex, replacement); // stays "Hi, I'm SO"
        }

        myString = myString.replaceAll(regex, replacement); // Becomes "Hi, I'm Not SO"

如您所见,要求是不应发生 String 替换,因为条件是 dontReplace,但由于删除了 if,因此发生了替换,即使它不应该发生。

【讨论】:

  • 谢谢!这对我帮助很大:)
【解决方案2】:

“在性能方面的任何重要性”还取决于整个事情在您的软件中执行的频率。

分析器运行(通过visualvm 左右)将显示您的大部分执行时间是否花费在String#replaceAll() 上。如果不是,您将无法通过优化获得显着改进。这听起来很明显,但经常被遗忘。

如果优化不会带来显着的收益,那么选择更易读的代码变体几乎总是会更好。

【讨论】:

    【解决方案3】:

    “如果”本身不会影响性能。 虽然现在函数调用很便宜,但 String.contains() 会多做 4-5 次函数调用。

    但是,前一种变体可读性更好,并且不易出错。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-24
      • 2012-11-23
      • 2018-10-10
      • 2021-03-04
      • 1970-01-01
      • 2015-04-13
      • 1970-01-01
      • 2012-02-26
      相关资源
      最近更新 更多