我有一个包含一些数据的字符串,我需要从中删除一些特殊字符并标记数据。
应首选以下两种方法中的哪一种以获得更好的性能:
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("\?|.|\)|\(|,", "");
它可能会走得更快。