Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从字符串中删除不在白名单上的所有字符_Java_Regex_Replace_Character_Whitelist - Fatal编程技术网

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

Java 从字符串中删除不在白名单上的所有字符,java,regex,replace,character,whitelist,Java,Regex,Replace,Character,Whitelist,我正在尝试编写java代码,它将删除所有不需要的字符,并且只允许有白名单上的字符 例如: String[] whitelist = {"a", "b", "c"..."z", "0"..."9", "[", "]",...} 我只想要字母(大写和小写)和数字+我要添加的一些后续字符。 然后,我将为字符串中的每个字符启动for()循环,如果它不在白名单上,则用空字符串替换它 但这不是一个好的解决方案。也许可以用模式(regex)来实现?谢谢。是的,您可以使用带正则表达式的: String inp

我正在尝试编写java代码,它将删除所有不需要的字符,并且只允许有白名单上的字符

例如:

String[] whitelist = {"a", "b", "c"..."z", "0"..."9", "[", "]",...}
我只想要字母(大写和小写)和数字+我要添加的一些后续字符。 然后,我将为字符串中的每个字符启动
for()
循环,如果它不在白名单上,则用空字符串替换它

但这不是一个好的解决方案。也许可以用模式(regex)来实现?谢谢。

是的,您可以使用带正则表达式的:

String input = "BAD good {} []";
String output = input.replaceAll("[^a-z0-9\\[\\]]", "");
System.out.println(output); // good[]
或者,您可以使用:


这只是显示了小写版本,使其更易于演示。要包含大写字母,请在正则表达式中使用
“[^A-Za-z0-9\\[\\]]”
(以及您想要的任何其他符号),对于
字符匹配器
,您可以
使用
字符匹配器。在范围('A','Z')
中,您可以尝试匹配不在白名单中的所有内容,并将其替换为空字符串:

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

也许它可以用模式(regex)来实现?
是的,你说得对。您可以开始使用什么类型的字符?根据不同的要求,正则表达式可能会有很大的不同。在第一个代码中,使用正则表达式,我如何将下一个字符添加到白名单中(不仅是[and],还包括空格和下一个字符)?既然PerwinCZ在寻找小写和大写字母,它应该是
[^A-Za-z0-9\\[\\]]
?@jonhopkins:我只是在继续代码中的内容-将进行编辑以澄清这一点。好的,我自己修复了它。当我想添加下一个字符时,我会在关闭前添加到正则表达式]此:
\\char
@PerwinCZ:您不需要转义所有字符,只需转义正则表达式中具有特殊含义的字符。
String in = "asng $%& 123";
//this assumes your whitelist contains word characters and whitespaces, adapt as needed
System.out.println(in.replaceAll( "[^\\w\\s]+", "" ));