Java ReplaceAll vs For 循环中带有 Replace



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

应首选以下两种方法中的哪一种以获得更好的性能:

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
}  

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 循环中的每个标记进行替换(无论替换如何执行)都更快?

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

提前致谢

没有任何循环就足够了replace

replaceAll引擎盖下使用正则表达式引擎,其性能开销要高得多。

似乎对这个"全部"后缀有一个普遍的误解。

请参阅 字符串 replace() 和 replaceAll() 之间的区别。

更新

发现了与此非常相似的问题:

从字符串中删除某些字符

我不知道

这类问题的统计数据,但首先,如果您担心性能,我会用一个调用替换各种replaceAll()调用,如下所示:

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

它可能会走得更快。

最新更新