从字符串中删除标点符号

时间:2014-06-24 20:08:04

标签: java regex string replaceall

我有一个字符串,我需要删除这些符号:-- + [ ] { } ( ) \ /

例如:

    String clean = "This \ is / an example. This -- is + an [(example)].";

    clean = clean.replaceAll("[/[()/]]", "");
    clean = clean.replaceAll("/-/-", "");

    clean = clean.replaceAll("\\/","");
    clean = clean.replaceAll("\\\\", " ");
    clean = clean.replaceAll("\\+", "");

    return clean.replaceAll("[ ]+", " ").trim();

我的输出应为:This is an example. This is an example.

我的代码不会删除我需要的所有内容,而且我想知道是否有更短的方法来执行此操作。

-

我应该提到的一些特殊情况:-只有在有两个一起时才应删除。 /应该用空格替换。我将尝试在此处调整您的解决方案。感谢。

5 个答案:

答案 0 :(得分:4)

您只需调用String.replaceAll方法并指定必须用空字符串替换这些字符:

clean = clean.replaceAll("(?:--|[\\[\\]{}()+/\\\\])", "");

但是如果您需要多次这样做,那么创建一个Pattern对象是值得的,这样就不必重复编译正则表达式:

private static final Pattern UNWANTED_SYMBOLS =
        Pattern.compile("(?:--|[\\[\\]{}()+/\\\\])");

现在您可以使用它来创建Matcher对象并使用它来进行替换:

Matcher unwantedMatcher = UNWANTED_SYMBOLS.matcher(clean);
clean = unwantedMatcher.replaceAll("");

如果您需要在一个运行次数超过几次的循环中使用替换,这应该更有效。

答案 1 :(得分:1)

一,您不能使用/转义,而是使用\执行此操作。

二,如果你需要使用\,你必须对其进行双重转义以使其进入正则表达式。

三,您可以将所有表达式合并为一个正则表达式。

四,您可以将来电链接到replaceAll()

public class Replace { 
    public static void main(String[] args) {
        String clean = "This \\ is / an example. This -- is + an [(example)].";

        clean = clean.replaceAll("[\\[()\\]{}+\\\\\\/-]", "").replaceAll(" +", " ");
        System.out.println(clean.trim());
    }
}

输出:

This is an example. This is an example.

答案 2 :(得分:1)

你应该能够一举删除所有东西。只需将所有内容放入角色类([])。

[\[\]+{}()\\/-]

如:

clean = clean.replaceAll("[\\[\\]+{}()\\\\/-]", "");

答案 3 :(得分:1)

您可以尝试:

String clean = "This \\ is / an example. This -- is + an [(example)].";

return clean.replaceAll("[(--)+\\[\\]{}()\\\\/]", "").trim());

答案 4 :(得分:0)

转义时将/替换为\\

String clean = "This \\ is / an example. This -- is + an [(example)]."; // Had to change \ to \\

clean = clean.replaceAll("[\\[()\\]]", "");
clean = clean.replaceAll("\\-\\-", "");

clean = clean.replaceAll("\\/","");
clean = clean.replaceAll("\\\\", " ");
clean = clean.replaceAll("\\+", "");