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

Java中如何按空格及特殊字符拆分字符串?

解决方案:使用带捕获组的正则表达式拆分并过滤空项

要实现你需要的拆分效果,核心思路是:把空格作为普通分隔符(拆分后丢弃),而**括号()、逗号、算术运算符(比如+)**作为需要保留的分隔符,通过正则捕获组让这些字符被保留在拆分结果中,最后过滤掉拆分过程中产生的空字符串即可。

具体正则表达式

Java中split()方法的正则参数可以写成:

"\\s|([(),+])"

正则说明

  • \\s:匹配任意空白字符(这里就是空格),作为分隔符,拆分后不会保留在结果里;
  • ([(),+]):用捕获组包裹我们需要保留的分隔符——(、)、,、+。Java的split()方法会将捕获组匹配到的内容保留在拆分结果数组中;
  • |:表示“或”逻辑,即匹配空格,或者匹配捕获组里的任意字符。

完整Java代码示例

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class SplitExample {
    public static void main(String[] args) {
        String input = ".more opr (&x NE &m),&n+1";
        // 拆分字符串
        String[] rawParts = input.split("\\s|([(),+])");
        
        // 过滤空字符串(拆分时产生的无效空项)
        List<String> finalParts = Arrays.stream(rawParts)
                .filter(part -> !part.isEmpty())
                .collect(Collectors.toList());
        
        // 输出结果
        System.out.println(finalParts);
        // 输出:[.more, opr, (, &x, NE, &m, ), ,, &n, +, 1]
    }
}

扩展说明

如果需要支持更多算术运算符(比如-、*、/),只需要修改正则里的字符类部分即可,比如:

"\\s|([(),+\\-*/])"

注意-在字符类里如果不是放在开头/结尾,需要转义(写成\\-),避免被解析为范围符号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:52:37