如何从字符串中删除特殊字符?

时间:2011-09-26 08:08:18

标签: java regex

我想删除特殊字符,例如:

- + ^ . : ,

来自使用Java的String。

8 个答案:

答案 0 :(得分:228)

这取决于您定义为特殊字符的内容,但请尝试replaceAll(...)

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

请注意,^字符不能是列表中的第一个字符,因为您必须要转义它,否则它将意味着“除了这些字符之外的任何字符”。

另一个注意事项:-字符必须是列表中的第一个或最后一个字符,否则您必须转义它或者它将定义一个范围(例如:-,意味着“全部:,范围内的字符。

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

$


如果你想摆脱所有的标点符号和符号,试试这个正则表达式:String result = yourString.replaceAll("[\\-\\+\\.\\^:,]",""); (请记住,在Java字符串中你必须使用反斜杠:\p{P}\p{S})。

第三种方式可能是这样的,如果你能准确定义你的字符串中应该留下什么:

"\\p{P}\\p{S}"

这意味着:替换不是单词字符的所有内容(在任何情况下为a-z,0-9或_)或空格。

编辑:请注意,还有一些其他模式可能会有所帮助。但是,我无法解释所有内容,因此请查看regular-expressions.info的参考部分。

正如Ray所建议的那样,这里是“定义允许字符”方法的限制性较小的替代方法:

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

正则表达式匹配任何语言中不是字母的所有内容,而不是分隔符(空格,换行符等)。请注意,您不能使用String result = yourString.replaceAll("[^\\p{L}\\p{Z}]",""); (大写字母P表示没有该属性),因为这意味着“所有不是字母或不是空格的东西”,几乎匹配所有内容,因为字母不是空白和反之亦然。

有关Unicode的其他信息

一些unicode字符似乎由于编码它们的不同可能方式(作为单个代码点或代码点组合)而导致问题。有关详细信息,请参阅regular-expressions.info

答案 1 :(得分:16)

如此处所述 http://developer.android.com/reference/java/util/regex/Pattern.html

  

模式是编译正则表达式。在许多情况下,String.matchesString.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

答案 2 :(得分:14)

尝试replaceAll()类的String方法。

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

public String replaceAll(String regex,
                         String replacement)

示例:

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

它应该删除您要删除的所有{'^','+',' - '}字符!

答案 3 :(得分:12)

这将替换除字母数字

以外的所有字符
replaceAll("[^A-Za-z0-9]","");

答案 4 :(得分:3)

删除特殊字符

String t2 = "!@#$%^&*()-';,./?><+abdd";

t2 = t2.replaceAll("\\W+","");

输出将是:abdd.

这很有效。

答案 5 :(得分:2)

在Java中使用String.replaceAll()方法。 replaceAll应该足以解决您的问题。

答案 6 :(得分:1)

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

String str="+919595354336";

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

 System.out.println(result);

输出:

919595354336

答案 7 :(得分:0)

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

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