【发布时间】:2014-11-19 12:37:33
【问题描述】:
我有一个包含一些数据的字符串,我需要从中删除一些特殊字符并标记数据。
为了获得更好的性能,应该首选以下两种方法中的哪一种:
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 循环中对每个标记进行替换(无论替换如何都执行)更快?
即替换一次并执行其他操作或对每个令牌逐步替换,然后执行所需的操作。
提前致谢
【问题讨论】:
-
对每一个“哪个更快,这个代码或这个代码”的答案都是“分析它们并查看”。
-
对于您的第一个示例,我希望
data=data.replaceAll("[\\.,\\(\\)?]");一步替换所有内容。这样会快很多。
标签: java performance replace execution-time replaceall