有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Android Java字符串。replaceAll替换特定字符(正则表达式)

我需要删除一些特定的“特殊”字符,并在它们出现时用空字符串替换它们。 我目前在正则表达式方面遇到了问题,可能是Java转义的问题。我不能把它们都放在一起,只是不起作用,我试了很多!图特

目前,我正在一个接一个地做这件事,这有点傻,但至少现在它是有效的,就像这样:

public static String filterSpecialCharacters(String string) {
    string = string.replaceAll("-", "");
    string = string.replaceAll("\\[", "");
    string = string.replaceAll("\\]", "");
    string = string.replaceAll("\\^", "");
    string = string.replaceAll("/", "");
    string = string.replaceAll(",", "");
    string = string.replaceAll("'", "");
    string = string.replaceAll("\\*", "");
    string = string.replaceAll(":", "");
    string = string.replaceAll("\\.", "");
    string = string.replaceAll("!", "");
    string = string.replaceAll(">", "");
    string = string.replaceAll("<", "");
    string = string.replaceAll("~", "");
    string = string.replaceAll("@", "");
    string = string.replaceAll("#", "");
    string = string.replaceAll("$", "");
    string = string.replaceAll("%", "");
    string = string.replaceAll("\\+", "");
    string = string.replaceAll("=", "");
    string = string.replaceAll("\\?", "");
    string = string.replaceAll("|", "");
    string = string.replaceAll("\"", "");
    string = string.replaceAll("\\\\", "");
    string = string.replaceAll("\\)", "");
    string = string.replaceAll("\\(", "");
    return string;
}

这些都是我需要删除的角色:

- [ ] ^ / , ' * : . ! > < ~ @ # $ % + = ? | " \ ) (

很明显,我遗漏了一些东西,我不知道如何把它们放在一行。帮忙


共 (2) 个答案

  1. # 1 楼答案

    使用这些代码

    String REGEX = "YOUR_REGEX";
    Pattern p = Pattern.compile(REGEX);
    Matcher m = p.matcher(yourString);
    yourString = m.replaceAll("");
    

    更新:

    你的正则表达式看起来像

    String REGEX = "-|\\[|\\]|\\^|\\/|,|'|\\*|\\:|\\.|!|>|<|\\~|@|#|\\$|%|\\+|=\\?|\\||\\\\|\\\\\\\\|\\)|\\(";
    

    SAPMLE:

    String yourString = "#My (name) -is @someth\ing"";
    //Use Above codes
    Log.d("yourString",yourString);
    

    输出

    enter image description here

  2. # 2 楼答案

    实际上,您的代码不起作用,因为.replaceAll("$", "")将字符串结尾替换为空字符串。要替换文字$,需要对其进行转义。删除管道符号也存在同样的问题

    您只需将需要替换的字符放入字符类,并应用+量词以获得更好的性能,如下所示:

    string = string.replaceAll("[-\\[\\]^/,'*:.!><~@#$%+=?|\"\\\\()]+", "");
    

    请注意,在字符类中,大多数“特殊正则元字符”都会失去其特殊状态,您只需转义[]\、连字符(如果它不在字符类的开始/结束处)和^(如果它是“正”字符类中的第一个符号)

    DEMO

    String s = "-[]^/,'*:.!><~@#$%+=?|\"\\()TEXT";
    s = s.replaceAll("[-\\[\\]^/,'*:.!><~@#$%+=?|\"\\\\()]+", "");
    System.out.println(s); // => TEXT