删除模式Java的特殊字符

时间:2013-10-08 11:48:07

标签: java pattern-matching

我想从字符串中删除这些字符:

+ - ! ( ) { } [ ] ^ ~ : \

我也想删除它们:

/*
*/
&&
||

我的意思是我不会删除&|如果第二个字符跟在第一个字符后面,我将删除它们/* */ && ||

如何在Java上高效快速地完成这项工作?

示例:

a:b+c1|x||c*(?)

将是:

abc1|xc*?

4 个答案:

答案 0 :(得分:1)

这可以通过很长的,但实际上是very simple regex来完成。

String aString = "a:b+c1|x||c*(?)";
String sanitizedString = aString.replaceAll("[+\\-!(){}\\[\\]^~:\\\\]|/\\*|\\*/|&&|\\|\\|", "");
System.out.println(sanitizedString);

答案 1 :(得分:1)

我认为java.lang.String.replaceAll(String regex,String replacement)就是你所需要的:

http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#replaceAll(java.lang.String,java.lang.String)。

答案 2 :(得分:0)

ThomasHow to remove special characters from a string?上写道:

  

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

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

请注意,^字符不能是列表中的第一个字符,因为   你要么必须逃避它,要么意味着“除了这些之外的任何东西   字符”。

     

另一个注意事项: - 角色需要是第一个或最后一个   列表,否则你必须逃避它或它将定义一个范围(   例如: - ,意思是“范围内的所有字符:to,”。

     

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

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

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

     

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

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

这是“定义允许的字符”的限制性较小的替代方案   方法,正如Ray所说:

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

正则表达式匹配任何语言中不是字母的所有内容   不是分隔符(空格,换行符等)。请注意,您无法使用   [\ P {L} \ P {Z}](大写字母P表示没有该属性),因为那样   意思是“所有不是字母或不是空白的东西”,这些   几乎匹配一切,因为字母不是空白和副   反之亦然。

答案 3 :(得分:0)

有两种方法可以做到:

1)

ArrayList<String> arrayList = new ArrayList<String>();
    arrayList.add("+");
    arrayList.add("-");
    arrayList.add("||");
    arrayList.add("&&");
    arrayList.add("(");
    arrayList.add(")");
    arrayList.add("{");
    arrayList.add("}");
    arrayList.add("[");
    arrayList.add("]");
    arrayList.add("~");
    arrayList.add("^");
    arrayList.add(":");
    arrayList.add("/");
    arrayList.add("/*");
    arrayList.add("*/");
    String string = "a:b+c1|x||c*(?)";
    for (int i = 0; i < arrayList.size(); i++) {
        if (string.contains(arrayList.get(i)));
            string=string.replace(arrayList.get(i), "");
    }
    System.out.println(string);

2)

    String string = "a:b+c1|x||c*(?)";
    string = string.replaceAll("[+\\-!(){}\\[\\]^~:\\\\]|/\\*|\\*/|&&|\\|\\|", "");
    System.out.println(string);