Java如何验证「操作数 运算符 操作数」格式的输入(如1.4 * 5)
问题原因
你的正则表达式存在两处语法误用,导致匹配不符合预期:
- 错误使用字符集语法
[]包裹数值匹配逻辑:[]仅用于匹配单个字符,你把多字符的数值匹配规则放在[]内,实际只能匹配单个数字/小数点字符,因此多位数、小数全部校验失败 - 运算符部分的
[]内多写了多余的逗号,会误将逗号识别为合法运算符
修复方案
将正则替换为如下内容即可:
private static final String regex = "(\\d+\\.?\\d*|\\.\\d+) [+\\-*/] (\\d+\\.?\\d*|\\.\\d+)";
正则匹配逻辑说明:
- 第一组
(\\d+\\.?\\d*|\\.\\d+)匹配左操作数:支持整数(如123)、带整数部分的小数(如12.34)、省略整数部分的小数(如.56) - 中间
[+\\-*/]匹配支持的四种运算符 - 第二组同第一组,匹配右操作数
可选优化
如果需要兼容操作数和运算符之间的多个空格/制表符,可将中间的空格替换为\\s+,正则修改为:
private static final String regex = "(\\d+\\.?\\d*|\\.\\d+)\\s+[+\\-*/]\\s+(\\d+\\.?\\d*|\\.\\d+)";
校验效果
修复后你给出的所有合法输入都可以正常通过校验:
1 + 3校验通过1.3 - 4校验通过123 * 3434校验通过12.34 * 485校验通过
内容的提问来源于stack exchange,提问作者Itai
相关产品推荐
相关产品推荐

