从String中删除字符的更好方法(时间和空间):
方法1 :
String charsToRemove = "abc";
String myString = "abcdef";
myString = myString.replaceAll("["+charsToRemove+"]", "");
方法2 :
// Initialized to charsToRemove
HashSet<Character> charsToRemoveSet = ...
Character[] myCharArray = myString.toCharArray();
int dst = 0;
for(int src=0; src<myCharArray.length; src++) {
if(!charsToRemoveSet.contains(myCharArray[src]))
myCharArray[dst++] = myCharArray[src];
}
myString = new String(myCharArray, 0, dst);
答案 0 :(得分:1)
视觉上,选项1更清晰。只有这一点足以让我选择它。它也可能更快(尽管它取决于输入的长度)。在选项二中,您正在设置第二个循环。 HashSet.contains()
运行自己的循环,增加了第二个延迟。
对于短字符串,您可能不会注意到差异,但再一次,很难说出第二个字符串发生了什么。
答案 1 :(得分:0)
如果字符集是固定的,那么我会将选项1更改为
private static Pattern pattern = Pattern.compile("[abc]");
public String removeChars(String s) {
return pattern.matcher(s).replaceAll("");
}
String.replaceAll看起来不错但在内部它每次调用Pattern.compile。除了"[" + charsToRemove + "]"
之外,性能杀手也是可以避免的。
至于备选方案2
Character[] myCharArray = myString.toCharArray();
不起作用,应该是
char[] myCharArray = myString.toCharArray();