要求:字符串应仅包含字母,数字和空格 我必须将一个干净的名称传递给另一个API。
实施:Java
我想出了这个要求
public static String getCleanFilename(String filename) { if (filename == null) { return null; } return filename.replaceAll("[^A-Za-z0-9 ]",""); }
这适用于我的一些测试用例,但我想知道我是否缺少任何边界条件,或者更好的方法(性能)。
答案 0 :(得分:2)
评论的补充:我不认为在采用用户输入的情况下性能是一个问题(文件名不应该那么长......)。
但是关于你的问题:你可以通过在正则表达式中添加额外的+来减少替换次数:
[^A-Za-z0-9 ]+
答案 1 :(得分:1)
要回答您的直接问题,\t
会失败您的方法并以“空格”方式传递。切换到\s
([...\s]
,你很好。
无论如何,您的设计可能存在缺陷。不要随意用户输入,让用户知道你不允许的内容并制作修正手册。
修改强>
如果文件名无关紧要,请使用文件名的SHA-2哈希并使用它。保证满足您的要求。