使用if条件检查和replaceAll进行代码优化

时间:2013-03-26 09:59:19

标签: java string if-statement replace

我有一个字符串,我必须检查一些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条件在性能方面是否有任何意义。

提前致谢。

3 个答案:

答案 0 :(得分:2)

仅当sometextsomeregexpattern相同时,此选项才有效。否则,if条件很重要。

假设您的someregexpattern确实存在于字符串中,但您的if条件会评估为false,在这种情况下,您不应该进行替换。但是如果删除if语句,则会发生替换,这种情况并不完全相同。

E.g: - 为了帮助您更好地理解。

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被删除,更换发生了,即使它不是不应该。

答案 1 :(得分:0)

“如果”本身不会影响性能。 虽然现在函数调用非常便宜,但String.contains()还会再执行4-5次函数调用。

然而,前一种变体更易读,更容易出错。

答案 2 :(得分:0)

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

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

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