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

Sam*_*hra 76 java regex

我想删除特殊字符,如:

- + ^ . : ,
Run Code Online (Sandbox Code Playgroud)

来自使用Java的String.

Tho*_*mas 237

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

String result = yourString.replaceAll("[-+.^:,]","");
Run Code Online (Sandbox Code Playgroud)

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

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

所以,为了保持一致性,而不是依赖于角色定位,你可能想逃避所有那些正则表达式中有特殊含义的字符(下面的列表是不完整的,所以要注意的其他人物,如(,{,$ 等) :

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");
Run Code Online (Sandbox Code Playgroud)


如果你想摆脱所有的标点符号和符号,试试这个正则表达式:( \p{P}\p{S}请记住,在Java字符串中你必须逃避反斜杠:) "\\p{P}\\p{S}".

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

String  result = yourString.replaceAll("[^\\w\\s]","");
Run Code Online (Sandbox Code Playgroud)

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

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

如Ray所建议的那样,对于"定义允许字符"方法的限制较少的替代方法:

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

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

有关Unicode的其他信息

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


Ste*_*hen 18

这将替换除字母数字以外的所有字符

replaceAll("[^A-Za-z0-9]","");
Run Code Online (Sandbox Code Playgroud)

  • 这也将删除阿拉伯字符。 (3认同)
  • 这是最好的答案。 (2认同)

tur*_*oid 17

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

模式是编译正则表达式.在许多情况下,方便的方法,如String.matches,String.replaceAll并且String.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;
 }
}
Run Code Online (Sandbox Code Playgroud)

结果

String is = one
Number is = 9196390097
Run Code Online (Sandbox Code Playgroud)


omt*_*t66 14

尝试类的replaceAll()方法String.

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

public String replaceAll(String regex,
                         String replacement)
Run Code Online (Sandbox Code Playgroud)

例:

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

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


Aki*_*ila 5

删除特殊字符

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

t2 = t2.replaceAll("\\W+","");
Run Code Online (Sandbox Code Playgroud)

输出将是: abdd.

这很完美。