我有一个包含一些数据的字符串,我需要从中删除一些特殊字符并标记数据。
为了获得更好的性能,应该首选以下哪两种方法:
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循环中的每个标记(无论替换是否执行)都会更快?
即。替换一次并执行其他操作或逐步替换每个令牌,然后执行所需的操作。
先谢谢
答案 0 :(得分:4)
只需replace
即可,无任何循环。
replaceAll
使用regexp引擎,它具有更多的性能开销。
似乎对这个&#34; All&#34;有一个共同的误解。后缀。
请参阅Difference between String replace() and replaceAll()。
<强>更新强>
发现与此问题非常类似的问题:
答案 1 :(得分:1)
我不知道有关此类问题的统计数据,但首先,如果您担心性能问题,我会用一个replaceAll()
调用替换单个调用,如下所示:
data=data.replaceAll("\\?|\.|\\)|\\(|,", "");
它可能会更快。