繁体   English   中英

如何从我的字符串中删除一些字符

[英]How do I remove some characters from my 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,e-f";
str = str.replaceAll(pat,"");

看见

更高效的性能:是的。 您不能从字符串中“删除”字符,因此无论如何您都不必创建一个新字符。 考虑基于 switch/case 的解决方案:

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() ,除非它们与您要删除的字符之一匹配。

但我不确定那会快很多。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM