问题在于:用户面对一个文本框,可以在其中输入过滤器。这个过滤器是用来过滤未过滤数据的。用户经历了Oracle Forms洗脑,除了%外,他们不期望有其他特殊字符。我猜%在Java中更或多少代表“.*”正则表达式。
如果用户行为良好,将输入类似“CTHULH%”这样的内容,那么我可以构建一个模式:
如果用户行为良好,将输入类似“CTHULH%”这样的内容,那么我可以构建一个模式:
Pattern.compile(inputText.replaceAll("%", ".*"));
但是如果用户来自Innsmouth,那么他只需轻松按几个键就可以打破我设计的密码。他会打入".+\[a-#$%^&*(",这样做是行不通的:
Pattern.compile(Pattern.quote(inputText).replaceAll("%", ".*"));
由于会在字符串开头加上\Q以及在字符串结尾加上\E,因此我的% -> .*将变得无效。
问题是:我是否需要查找Pattern代码中的每个特殊字符并自己添加"\\"进行转义,还是可以自动完成?或者我是否已经深入问题中,忽略了一些明显的解决方法?