13

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

例子:

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

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

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

4

2 回答 2

23

是的,你可以使用String.replaceAllwhich 需要一个正则表达式:

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

或者在番石榴中,您可以使用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').

于 2013-03-06T13:49:20.890 回答
2

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

String in = "asng $%& 123";
//this assumes your whitelist contains word characters and whitespaces, adapt as needed
System.out.println(in.replaceAll( "[^\\w\\s]+", "" )); 
于 2013-03-06T13:51:59.113 回答