从字符串中删除字符:正则表达式或手动

时间:2013-01-06 02:09:17

标签: java regex string

从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);

2 个答案:

答案 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();