校验字符串是否匹配指定模式的Java方法不生效问题排查
正则表达式问题说明
你使用的正则存在的核心问题是限制了子串的出现顺序和最大重复轮次,无法覆盖三类子串任意拼接的场景:
- 你当前写的正则
(ifi)*(ba)*(fi)*(ifi)*(ba)*(fi)*的逻辑是仅允许最多两轮「先ifi、再ba、最后fi」的序列,不允许三类子串随意交替出现超过两次 - 你测试的有效单词
babafibafifiba拆解后结构为ba+ba+fi+ba+fi+ifi+ba,序列中出现了第三次ba,超出了你正则的匹配范围,因此错误返回false。
修复方案
要支持ba、fi、ifi三类子串任意顺序、任意次数拼接,只需要将三类子串放在同一个可选分组中,允许分组重复1次及以上即可,修改后代码如下:
public boolean checkIfStringIsValidWord(String word) { return word.matches("(ba|fi|ifi)+"); }
内容的提问来源于stack exchange,提问作者user14794461
相关产品推荐
相关产品推荐

