Java中用String.matches检测指定多字符串序列的问题排查
问题分析与解决方案
你的原代码没达到预期,核心问题是**matches()方法要求整个字符串完全匹配正则表达式**,而你实际要检测的是字符串中存在任意一处符合规则的子串。
比如你要匹配4+*2,原正则[-*+/][*+/]只会匹配像"+*"这种整个字符串就是两个运算符的情况,自然对4+*2无效。
正确实现方式
你要的逻辑是检测字符串中是否包含「*、-、/、+任意一个,紧跟*、+、/任意一个」的子串,完全可以用正则简洁实现,有两种写法:
方法1:用Matcher的find()(推荐)
find()方法会在字符串中查找任意位置的匹配子串,是最适合场景的写法:
import java.util.regex.Pattern; import java.util.regex.Matcher; // ... Pattern opPattern = Pattern.compile("[-*+/][*+/]"); Matcher matcher = opPattern.matcher(combinedArray); if (matcher.find()) { // 匹配成功,执行你的代码 }
方法2:修改正则后用matches()
如果坚持用matches(),需要在正则前后加上.*(匹配任意长度的任意字符),让整个字符串只要包含目标子串就会匹配:
if (combinedArray.matches(".*[-*+/][*+/].*")) { // 匹配成功,执行你的代码 }
这两种写法的逻辑完全等价于你那一串contains()的判断,而且代码简洁易维护。
内容的提问来源于stack exchange,提问作者shaharW
相关产品推荐
相关产品推荐

