You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 16:15:41