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

Java中如何拆分含圆括号的字符串,使括号单独成为数组元素

解决表达式字符串拆分问题:让括号单独成为数组元素

你的问题核心是原正则只处理了数字与非数字的边界,但没有考虑到括号和其他非数字符号(比如*、-)之间的拆分,导致括号和相邻符号被合并到同一个数组元素里。

解决方案:修改拆分正则表达式

把原方法的split正则替换为包含括号边界匹配的版本,代码如下:

import java.util.Arrays;

public void convertString(String s) {
    // 修改后的正则表达式,新增括号的前后拆分规则
    String[] arr = s.split("(?<=[\\d.])(?=[^\\d.])|(?<=[^\\d.])(?=[\\d.])|(?<=[()])|(?=[()])");
    // 打印验证结果
    System.out.println(Arrays.toString(arr));
}

正则表达式详解

这个正则由4部分逻辑组成,用|分隔,覆盖所有需要拆分的边界:

  • (?<=[\\d.])(?=[^\\d.]):在数字/小数点和非数字/非小数点之间拆分(保留原逻辑,处理数字和符号的分界);
  • (?<=[^\\d.])(?=[\\d.]):在非数字/非小数点和数字/小数点之间拆分(保留原逻辑,处理符号和数字的分界);
  • (?<=[()]):在任意括号的后面拆分(比如两个连续括号)),会拆成单独的)和));
  • (?=[()]):在任意括号的前面拆分(比如*(会拆成*和(,-)会拆成-和));

测试验证

用你的测试字符串"1+2*(30+4/2-(1+2))*2+1"运行修改后的代码,输出结果为:

[1, +, 2, *, (, 30, +, 4, /, 2, -, (, 1, +, 2, ), ), *, 2, +, 1]

完全符合你期望的拆分效果。

额外边缘情况验证

比如处理连续括号的场景"((123-45))",拆分结果为[(, (, 123, -, 45, ), )],括号都单独成元素,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 19:47:41