2010-12-13 20 views
9

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

删除以下所有字符的“> [] - ”

目前IM这样做。但必须有一个更有效的方式

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

嗯,你可以使用正则表达式,但你不得不逃避特殊字符。你在谈论什么样的效率?运行时还是您自己的(即代码行)? – 2010-12-13 15:06:33

+0

担心这些特定问题的“效率”表明过早优化;我非常怀疑*这个*方法是你的应用程序的瓶颈。请花些时间找出您的应用程序*真的很慢并且需要优化。 – Bombe 2010-12-13 15:20:23

回答

9

使用能够描述你要替换的字符,替换所有匹配正则表达式的方法的正则表达式:

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

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

+0

中的所有这些字符都变成了魅力。谢谢。 – code511788465541441 2010-12-13 15:22:15

+0

如果我想保留新行,该怎么办? – Mann 2016-06-10 06:33:12

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

反斜线是逃避“[”,因为第一个参数实际上是一个正则表达式。

+0

打我吧,+1 – 2010-12-13 15:06:30

+0

它不起作用 – code511788465541441 2010-12-13 15:07:13

+0

呃......你想要将这些角色包装在角色类('[]')中,因为你正在寻找它们中的任何一个,不是连续排列的所有它们的序列... – 2010-12-13 15:09:16

0

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

但我不确定这会快很多。

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

作品,但它比我想要的更多。它删除了所有数据的所有数据 – code511788465541441 2010-12-13 15:21:27

+0

@ user521180:编辑了一下,再试一次。如果它仍然不能按照你想要的方式工作,你能给我们一个数据样本吗? – darioo 2010-12-13 15:23:31

2

使用替代/的replaceAll方法导致的新模式每次编译。所以如果你多次这样做,我会强烈建议循环遍历字符或创建一个单一的正则表达式来重复使用。

+0

请不要循环自己的角色;但如果这很重要,请执行“创建正则表达式”(一种新的'Pattern'实例,使用Java)。请参阅java.util.regex.Pattern的Java文档,该文档还提供了Java正则表达式引擎支持的正则表达式语法的基本概述。 – 2010-12-13 15:26:28

2

更高效的性能:是的。您不能从字符串中“删除”字符,因此您无法创建新字符。考虑一个开关/箱基础的解决方案:

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

这个问题的好解决方案! – Rahul 2017-12-01 05:42:23

6

可以使用String类的replaceAll方法。

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

但是你要删除哪些字符可能是正则表达式元字符,因此需要转义。您可以手动将它们转义为显示多个答案,或者您可以使用Pattern.quote()方法。

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

See it