2014-01-12 153 views
2

如何删除除“ - _”之外的字符串中的特殊字符。 现在我用:在java中删除字符串中的特殊字符?

replaceAll("[^\\w\\s]", "") 

它删除所有特殊字符,但我想保持“ - _”。谁能告诉我该怎么办?

+1

你认为什么“特殊”? –

回答

11

使用replaceAll("[^\\w\\s\\-_]", "");

我所做的是下划线和连字符添加到正则表达式。我在连字符前添加了一个\\,因为它也用于指定范围:a-z表示a和z之间的所有字母。用\\转义它可以确保它被视为连字符。

+2

你可以在中间放置一个'-'吗? – assylias

+0

它可能被作为一个范围捕获。在它之前放置一个反斜杠。我修改了它。 – zmbq

+3

我认为'-'必须是该集合的最后一个元素,因为如果不是它被识别为“范围”。 – nKn

5

这可能帮助:

replaceAll("[^a-zA-Z0-9_-]", "");

0

使用此replaceAll("[\\w\\s\\-\\_\\<.*?>]", "");

0
Pattern pt = Pattern.compile("[^a-zA-Z0-9_-]"); 
    Matcher match = pt.matcher(c); 
    while (match.find()) { 
     String s = match.group(); 
     c = c.replaceAll("\\" + s, ""); 
    } 

考虑这个

2

我怀疑你需要分配结果(如果你不这样做),因为replaceAll()返回字符串,而不是更新的字符串(字符串是不可改变的)

str = str.replaceAll("[^\\w\\s-]", ""); 

还要注意的是,正则表达式是相当简单:

不需要在字符类中跳过破折号-:当作为字符类中的字面值使用时,它必须是第一个或最后一个(否则它表示范围,如a-z等)。

没有必要提及下划线可言,因为它是已经上市:\w包括下划线!

1
String str="[email protected]_- abc"; 
String s=str.replaceAll(" [^a-zA-Z_-]+ ", ""); 
System.out.println(str); 

它将替换给定字符串中的特殊字符和空格。

输出将是:owlabc_-

相关问题