我想要从字符串中删除以下所有字符:
目前我正在这样做。但一定有更有效的方法。">[],-"
newString = myString.replace(">","").replace("[","").replace("]","")....
使用描述您想替换的所有字符的正则表达式,并使用替换与正则表达式匹配的所有内容的方法:
newString = myString.replaceAll("[<>\\[\\],-]", "");
(编辑:我不认为应该转义<>
。而且我忘记了要加倍反斜杠,因为它们将被Java编译器和正则表达式引擎分别解析两次。)
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();
newString = myString.replaceAll("[>\\[\\],-]", "");
反斜杠用于转义'[',因为第一个参数实际上是一个正则表达式。
[]
)中,因为你要查找它们中的任何一个,而不是所有连续的字符序列... - Karl KnechtelPattern
实例)。请参阅Java文档中的java.util.regex.Pattern,该文档还提供了Java正则表达式引擎支持的基本概述。 - Karl KnechtelnewString = myString.replaceAll("[>\\[\\],-]", "");
你可以循环遍历每个字符,将它们逐一添加到 StringBuilder() 中,除非它们与你要删除的字符之一匹配。
但我不确定这样会更快。
使用正则表达式;字符串的replaceAll方法将正则表达式作为第一个参数,替换文本作为第二个参数;例如
return myString.replaceAll(">|\\[|\\]|,|-";, "");