0

这将是从字符串中删除字符的更好方法(时间和空间):

方法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);
4

2 回答 2

1

从视觉上看,选项 1 更清晰。仅此一项就足以让我选择它。它也可能更快(尽管它取决于您输入的长度)。在选项二中,您正在设置第二个循环。HashSet.contains()运行自己的循环,增加第二个延迟。

对于短字符串,您可能不会注意到差异,但再一次,很难说出第二个发生了什么。

于 2013-01-06T02:12:14.920 回答
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();
于 2013-01-06T06:52:38.560 回答