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

Java中如何使用正则正确分割{1-10}类范围表达式

Java正则拆分含大括号表达式的正确实现

现有问题

  • 目标需求:在Java中通过正则拆分{1-5}、{1-10}、{1-100}这类表达式
  • 原有实现代码:
String arr[] = expr.replaceAll("\\s+", "").split("(?<=[-+*/()])|(?=[-+*/()])");
  • 实际运行结果不符合预期:
    • {1-5}被拆分为{1、-、5三个元素
    • {1-10}被拆分为{1、-、10三个元素
    • {1-100}被拆分为{1、-、100三个元素
  • 预期拆分规则:大括号需要作为独立元素拆分,例如{1-5}要拆成{、1、-、5、}五个独立元素。

问题根因

原有拆分正则的匹配边界只覆盖了-+*/()运算符和小括号,没有将大括号{}纳入前后位置断言的匹配范围,导致大括号会和相邻的数字拼接在一起,无法被单独拆分。

修复方案

将大括号加入正则的前后断言匹配字符集即可,修改后的代码如下:

// 仅处理大括号、原有四则运算符和小括号的版本
String arr[] = expr.replaceAll("\\s+", "")
        .split("(?<=[-+*/(){}])|(?=[-+*/(){}])");

如果后续需要兼容中括号[]的拆分,可以使用扩展版本的正则:

// 兼容小括号、中括号、大括号和四则运算符的版本
String arr[] = expr.replaceAll("\\s+", "")
        .split("(?<=[-+*/(){}\\[\\]])|(?=[-+*/(){}\\[\\]])");

验证结果

传入{1-5}测试,拆分后数组元素依次为{、1、-、5、},完全符合预期。{1-10}、{1-100}等同类表达式均可按照相同规则正确拆分,不会再出现大括号和数字粘连的问题。

内容的提问来源于stack exchange,提问作者Pushpendra Singh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:16:00