2011-09-26 107 views
66

我想删除特殊字符,例如:从使用Java的字符串如何从字符串中删除特殊字符?

- +^. : , 

+0

你显然已经知道什么是正则表达式是基于你如何标记你的问题。你有没有尝试阅读'String'类的文档?特别是,查找“正则表达式”一词;有几种方法,有点想法应该告诉你如何继续...... :) –

+2

“特殊字符”这个短语被过度使用,几乎完全没有意义。如果你的意思是,“我有这个**特定**字符的列表,我想删除”,然后按照托马斯的建议,用正则表达式字符类和'replaceAll'形成你的模式。如果您有更深奥的要求,请编辑问题。 :) –

+1

那些不是特殊字符... 这些是:äâêíìéè,因为它们不是你常见的1字节字符类型,例如 - + ^是...... 无论如何,正如Ray所说的,要么为他们做一个'replaceAll',要么对字符串进行解析,把不是你想要取出的字符的字符添加到另一个字符串中,最后只需要对你要返回的字符串进行+ =。 –

回答

203

这取决于你定义为特殊字符,但尝试replaceAll(...)

String result = yourString.replaceAll("[-+.^:,]",""); 

注意,^字符不能在列表中的第一个,因为你那么要么逃跑呢或者它意味着“除这些字符以外的任何字符”。

另注:-字符必须是列表中的第一个或最后一个,否则你不得不逃避它或将它定义了一个范围(例如:-,将意味着“范围内的所有字符:,

因此,为了保持一致性而不依赖于字符定位,您可能希望转义所有那些在正则表达式中具有特殊含义的字符(以下列表不完整,因此请注意其他字符如({,$等):

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]",""); 


如果你想摆脱所有的标点和符号的,试试这个正则表达式:\p{P}\p{S}(记住,Java中的字符串,你不得不逃回斜线:"\\p{P}\\p{S}")。

第三种方法可以是这样的,如果你能确切地定义什么应该在你的字符串中左起:

String result = yourString.replaceAll("[^\\w\\s]",""); 

这意味着:代替一切,是不是一个单词字符(AZ在任何情况下, 0-9或_)或空格。

编辑:请注意,有一些其他模式可能会有帮助。但是,我无法全部解释它们,因此请参阅regular-expressions.info的参考部分。

这里的限制较少的替代品“定义允许的字符”的方法,如建议由雷:

String result = yourString.replaceAll("[^\\p{L}\\p{Z}]",""); 

正则表达式匹配的一切,这是不以任何语言的信,而不是一个分隔符(空格,换行符等)。请注意,您不能使用[\P{L}\P{Z}](大写字母P表示不具有该属性),因为这意味着“所有不是字母或空格”,几乎匹配所有内容,因为字母不是空格,反之亦然。

上的Unicode

附加信息的一些Unicode字符似乎会由于不同的可能的方式来对其进行编码(作为单个码点或代码点的组合)的问题。有关更多信息,请参阅regular-expressions.info

+0

+1为最佳通用解决方案。由于您在OP没有详细信息的情况下列出了一些变体,因此您可能会显示并解释像'[\ P {L}]' –

+0

这样的模式。另请注意,'-'字符必须是第一个或最后一个在列表中或它需要被转义。 – Kapep

+0

'[^ \\ p {L} \\ p {Z}]'似乎也消除了德国变音(ä,ö,ü)(至少它对我来说是这样):所以“正则表达式匹配所有这不是任何语言的字母“似乎不是100%正确的 – Peter

13

尝试replaceAll()方法的String类。

BTW这里是方法,返回类型和参数。

public String replaceAll(String regex, 
         String replacement) 

例子:

String str = "Hello +-^ my + - friends^^^-- ^^^ +!"; 
str = str.replaceAll("[-+^]*", ""); 

应该删除所有{ '^', '+', ' - '},你想删除字符!

2

在Java中使用String.replaceAll()方法。 replaceAll应该足够适合您的问题。

13

如这里所描述 http://developer.android.com/reference/java/util/regex/Pattern.html

模式被编译的正则表达式。在许多情况下,如String.matches,String.replaceAllString.split等便利方法将是更可取的,但如果您需要使用相同的正则表达式进行大量工作,则编译一次并重用它可能会更有效。 Pattern类及其伴侣Matcher也提供比String暴露的少量更多的功能。

public class RegularExpressionTest { 

public static void main(String[] args) { 
    System.out.println("String is = "+getOnlyStrings("!&(*^*(^(+one(&(^()(*)(*&^%$#@!#$%^&*()(")); 
    System.out.println("Number is = "+getOnlyDigits("&(*^*(^(+91-&*9hi-639-0097(&(^(")); 
} 

public static String getOnlyDigits(String s) { 
    Pattern pattern = Pattern.compile("[^0-9]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
public static String getOnlyStrings(String s) { 
    Pattern pattern = Pattern.compile("[^a-z A-Z]"); 
    Matcher matcher = pattern.matcher(s); 
    String number = matcher.replaceAll(""); 
    return number; 
} 
} 

结果

String is = one 
Number is = 9196390097 
1

您可以删除单个字符如下:

String str="+919595354336"; 

String result = str.replaceAll("\\\\+",""); 

System.out.println(result); 

OUTPUT:

919595354336 
0

如果你只是WA nt在java中进行文字替换,使用Pattern.quote(string)将任何字符串转义为文字。

myString.replaceAll(Pattern.quote(matchingStr), replacementStr) 
2

要删除专责事务字符

字符串T2 = “@#$%^ * &() - ';!?,/> < + abdd”;

t2 = t2.replaceAll(“\\ W +”,“”);

输出将是:abdd。

这个效果很好。

0

这将替换所有字符,除了字母数字

replaceAll("[^A-Za-z0-9]","");