如何使用Java正则表达式判断字符串中字符i的出现次数是否为偶数
正确正则实现
要判断字符串中字符i的出现次数是否为偶数,可直接使用如下正则表达式:
^([^i]*i[^i]*i)*[^i]*$
正则逻辑说明
^匹配字符串的起始位置([^i]*i[^i]*i)*匹配0组或多组「任意个非i字符 + 1个i+ 任意个非i字符 + 1个i」的结构,每组恰好包含2个i,匹配0组时对应i出现次数为0的场景[^i]*匹配字符串末尾剩余的所有非i字符$匹配字符串的结束位置
Java调用示例
直接使用String.matches()方法即可完成判断:
public class CheckICount { public static void main(String[] args) { String sample = "iuhuihuijdjoiuio"; boolean isEven = sample.matches("^([^i]*i[^i]*i)*[^i]*$"); // 示例字符串i出现5次,此处isEven结果为false System.out.println(isEven); } }
原正则的问题
你编写的(i*){2})*存在两个明显问题:
- 语法错误:多了一个多余的右括号,直接运行会抛出正则语法异常
- 逻辑错误:
i*可匹配0个或多个i,重复两次的规则完全无法约束i的总出现次数为偶数
扩展说明
如果需要同时匹配大小写的i,可在正则开头添加不区分大小写的标记(?i),修改为:
(?i)^([^i]*i[^i]*i)*[^i]*$
内容的提问来源于stack exchange,提问作者oiujoijoi
相关产品推荐
相关产品推荐

