Java 如何从字符串中删除一些字符

Java 如何从字符串中删除一些字符,java,string,Java,String,我想从字符串中删除以下所有字符 “>[],-” 目前我正在做这件事。但必须有一种更有效的方法 newString = myString.replace(">","").replace("[","").replace("]","").... 反斜杠用于转义“[”,因为第一个参数实际上是一个正则表达式。可以循环遍历每个字符,将它们逐个附加到StringBuilder()中,除非它们与要删除的字符之一匹配 但我不确定这是否会快很多。使用一个正则表达式来描述所有要替换的字符,并使用替换与正则表达

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

“>[],-”

目前我正在做这件事。但必须有一种更有效的方法

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

反斜杠用于转义“[”,因为第一个参数实际上是一个正则表达式。

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


但我不确定这是否会快很多。

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

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

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

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

更高效的性能:是。您不能“删除”字符串中的字符,所以无论如何你不能创建一个新的字符。考虑一个基于切换/基于实例的解决方案:

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();
StringBuilder sb=新建StringBuilder();
对于(int i=0;i”:
案例“[”:
案例']':
案例',':
案例'-':中断;
默认值:sb.append(s.getCharAt(i));
}
}
s=sb.toString();

您可以使用
String
类的
replaceAll
方法

您可以由要删除的字符组成字符类。替换字符串将是空字符串

但是要删除的字符可能是regex元字符,因此需要转义。您可以根据答案的多少手动转义它们,也可以使用
Pattern.quote()
方法

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

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

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

好吧,你可以使用正则表达式,但是你必须避开特殊字符。你说的是什么样的效率?运行时还是你自己的(即代码行)?担心“效率”这些问题中的任何一个都表明过早优化;我高度怀疑这种方法是否是应用程序的瓶颈。请花点时间找出应用程序真正缓慢且需要优化的地方。嗯……您将希望将这些字符包装在字符类中(
[]
)因为你是在寻找它们中的任何一个,而不是一行中的所有字符序列…不要认为这会起作用。这只会匹配符号按顺序排列在一起的情况。它仍然不起作用。我在我的stringsort作品中找到了所有这些字符,但它删除的字符比我想要的多得多。它删除了alm o最重要的data@user521180:编辑一点,再试一次。如果它仍然不能按您想要的方式工作,您能给我们一个数据示例吗?请不要自己循环使用字符;但要“创建正则表达式”(Java中的一个新的
模式
实例)如果这很重要,请参阅Java doc for Java.util.regex.Pattern,其中还提供了Java正则表达式引擎支持的正则表达式语法的基本概述。如果我想保留新行,该怎么办?如果您不能提供完整的链接,最好不要提这个问题。您的答案可能包含垃圾邮件内容。
String charToDel = ">[],-";
String pat = "[" + Pattern.quote(charToDel) + "]";
String str = "a>b[c]d,e-f";
str = str.replaceAll(pat,"");
return myString.replaceAll(">|\\[|\\]|,|-";, "");