从字符串中删除不在白名单中的所有字符

时间:2013-03-06 13:47:04

标签: java regex replace character whitelist

我正在尝试编写java代码,这将删除所有不需要的字符,并让只有列入白名单的字符。

示例:

String[] whitelist = {"a", "b", "c"..."z", "0"..."9", "[", "]",...}

我希望只有字母(小写和大写)和数字+我要添加的下一个字符。 然后我会为字符串中的每个字符开始for()循环,如果它不在白名单中,则用空字符串替换它。

但这不是一个好的解决方案。也许它可以使用模式(正则表达式)以某种方式完成?感谢。

2 个答案:

答案 0 :(得分:22)

是的,您可以使用带有正则表达式的String.replaceAll

String input = "BAD good {} []";
String output = input.replaceAll("[^a-z0-9\\[\\]]", "");
System.out.println(output); // good[]

或者Guava您可以使用CharMatcher

CharMatcher matcher = CharMatcher.inRange('a', 'z')
                          .or(CharMatcher.inRange('0', '9'))
                          .or(CharMatcher.anyOf("[]"));
String input = "BAD good {} []";
String output = matcher.retainFrom(input);

这只是显示小写版本,使其更容易演示。要包含大写字母,请在正则表达式中使用"[^A-Za-z0-9\\[\\]]"(以及您想要的任何其他符号) - 对于CharMatcher,您可or使用CharMatcher.inRange('A', 'Z')

答案 1 :(得分:2)

您可以尝试匹配白名单中没有的所有内容,并将其替换为空字符串:

String in = "asng $%& 123";
//this assumes your whitelist contains word characters and whitespaces, adapt as needed
System.out.println(in.replaceAll( "[^\\w\\s]+", "" ));