如何从String中删除一些字符

时间:2010-12-13 15:02:09

标签: java string

我想从字符串

中删除以下所有字符
  

“> [], - ”

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

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

8 个答案:

答案 0 :(得分:13)

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

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

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

答案 1 :(得分:7)

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

您可以构成一个由要删除的字符组成的字符类。替换字符串将为空字符串""

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

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

See it

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

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

答案 5 :(得分:1)

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

答案 6 :(得分:0)

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

但我不确定这会快得多。

答案 7 :(得分:0)

使用正则表达式;字符串relaceAll方法将reegex作为第一个参数,将替换文本作为第二个参数;例如

return myString.replaceAll(">|\\[|\\]|,|-";, "");