如何从String中删除一些字符

我想从我的字符串中删除所有以下字符

“> [], – ”

此刻我正在这样做。 但必须有一种更有效的方式

newString = myString.replace(">","").replace("[","").replace("]","").... 

使用描述要替换的所有字符的正则表达式,使用替换与正则表达式匹配的所有内容的方法:

 newString = myString.replaceAll("[<>\\[\\],-]", ""); 

(编辑:我不认为<>应该被转义,实际上。我忘了加倍反斜杠,因为它们将被解释两次:一次是Java编译器,一次是正则表达式引擎。)

您可以使用String类的replaceAll方法。

您可以形成由要删除的字符组成的字符类。 并且替换字符串将为空字符串""

但是您要删除的字符类中要删除的字符可能是正则表达式元字符,因此需要进行转义。 您可以在许多答案显示时手动转义它们,或者您也可以使用Pattern.quote()方法。

 String charToDel = ">[],-"; String pat = "[" + Pattern.quote(charToDel) + "]"; String str = "a>b[c]d,ef"; str = str.replaceAll(pat,""); 

看见

更高效的表现:是的。 你不能从字符串中“删除”字符,所以你无论如何都要创建一个新字符。 考虑基于交换机/案例的解决方案:

 StringBuilder sb = new StringBuilder(); for (int i = 0; i < s.length(); i++) { switch(s.getCharAt(i)) { case '>': case '[': case ']': case ',': case '-': break; default: sb.append(s.getCharAt(i)); } } s = sb.toString(); 

使用replace / replaceAll方法会导致每次都编译一个新的Pattern。 因此,如果您多次这样做,我强烈建议循环遍历字符或创建单个正则表达式以重复使用。

 newString = myString.replaceAll("[>\\[\\],-]", ""); 
 newString = myString.replaceAll("[>\\[\\],-]", ""); 

反斜杠是为了逃避'[‘,因为第一个参数实际上是一个正则表达式。

您可以循环遍历每个字符,将它们逐个附加到StringBuilder(),除非它们与您要删除的字符之一匹配。

但我不确定这会快得多。