Java ReplaceAll vs For循环,其中包含Replace

时间:2014-11-19 12:37:34

标签: java performance replace execution-time replaceall

我有一个包含一些数据的字符串,我需要从中删除一些特殊字符并标记数据。

为了获得更好的性能,应该首选以下哪两种方法:

String data = "Random data (For performance) Waiting for reply?"
data=data.replaceAll("?", "");
data=data.replaceAll(".", "");
data=data.replaceAll(",", "");
data=data.replaceAll("(", "");
data=data.replaceAll(")", "");  

String[] tokens = data.split("\\s+");  
for(int j = 0; j < tokens.length; j++){
  //Logic on tokens
}  

OR

String data = "Random data (For performance) Waiting for reply?"

String[] tokens = data.split("\\s+");  
for(int j = 0; j < tokens.length; j++){
    tokens[j]=tokens[j].replace("?", "");
    tokens[j]=tokens[j].replace(".", "");
    tokens[j]=tokens[j].replace(",", "");
    tokens[j]=tokens[j].replace("(", "");
    tokens[j]=tokens[j].replace(")", "");      

  //Logic on each token
}  

或者是否有其他方法可以提高性能? (非常感谢有些统计数据)

上面提供的For循环将用于在每个令牌上执行其他逻辑 替换方法是否更快地强加于整个内容,还是替换for循环中的每个标记(无论替换是否执行)都会更快?

即。替换一次并执行其他操作或逐步替换每个令牌,然后执行所需的操作。

先谢谢

2 个答案:

答案 0 :(得分:4)

只需replace即可,无任何循环。

replaceAll使用regexp引擎,它具有更多的性能开销。

似乎对这个&#34; All&#34;有一个共同的误解。后缀。

请参阅Difference between String replace() and replaceAll()

<强>更新

发现与此问题非常类似的问题:

Removing certain characters from a string

答案 1 :(得分:1)

我不知道有关此类问题的统计数据,但首先,如果您担心性能问题,我会用一个replaceAll()调用替换单个调用,如下所示:

data=data.replaceAll("\\?|\.|\\)|\\(|,", "");

它可能会更快。