我想从字符串中删除这些字符:
+ - ! ( ) { } [ ] ^ ~ : \
我也想删除它们:
/*
*/
&&
||
我的意思是如果第二个字符跟在第一个字符后面,我不会删除&
或者我会删除它们 ( )|
/* */ && ||
我怎样才能在 Java 中高效、快速地做到这一点?
例子:
a:b+c1|x||c*(?)
将会:
abc1|xc*?
我想从字符串中删除这些字符:
+ - ! ( ) { } [ ] ^ ~ : \
我也想删除它们:
/*
*/
&&
||
我的意思是如果第二个字符跟在第一个字符后面,我不会删除&
或者我会删除它们 ( )|
/* */ && ||
我怎样才能在 Java 中高效、快速地做到这一点?
例子:
a:b+c1|x||c*(?)
将会:
abc1|xc*?
这可以通过很长但实际上非常简单的 regex来完成。
String aString = "a:b+c1|x||c*(?)";
String sanitizedString = aString.replaceAll("[+\\-!(){}\\[\\]^~:\\\\]|/\\*|\\*/|&&|\\|\\|", "");
System.out.println(sanitizedString);
我认为 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)。
有两种方法可以做到这一点:
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);
这取决于您将什么定义为特殊字符,但请尝试 replaceAll(...):
String result = yourString.replaceAll("[-+.^:,]","");
请注意,^ 字符不能是列表中的第一个字符,因为您要么必须转义它,要么意味着“除了这些字符之外的任何字符”。
另一个注意事项: - 字符必须是列表中的第一个或最后一个字符,否则您必须对其进行转义,否则它将定义一个范围(例如:-,表示“范围内的所有字符:到,)。
因此,为了保持一致性并且不依赖于字符定位,您可能希望转义所有在正则表达式中具有特殊含义的字符(以下列表不完整,因此请注意其他字符,例如 (, {, $ 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 表示没有该属性),因为这意味着“所有不是字母或非空格的内容”,它几乎匹配所有内容,因为字母不是空格,反之亦然。