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

Java中如何基于子串而非正则拆分/分词字符串?

按字面量子串"}},"拆分Java字符串

没问题,咱们来搞定这个按精确子串拆分Java字符串的需求!首先得明确:Java自带的String.split()默认是按正则表达式匹配分隔符的,而你要的是精准匹配}},"这个子串,不能让它被当作正则规则解析。下面给你两种实用的解决方案:

方法1:JDK原生字面量匹配(推荐)

利用Pattern.quote()方法把分隔符转成正则中的字面量,这样split()就会严格匹配整个子串,不会解析正则语法:

public class StringSplitDemo {
    public static void main(String[] args) {
        String str = "{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e]}}, B={333={i= [b,c]}}}";
        String separator = "}},";
        
        // 将分隔符转为正则字面量,避免正则解析干扰
        String[] splitResult = str.split(Pattern.quote(separator));
        
        // 输出拆分后的内容
        for (String part : splitResult) {
            System.out.println("拆分片段:" + part);
        }
    }
}

运行后你会得到两个符合预期的片段:

  • 第一片段:{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e]}}
  • 第二片段: B={333={i= [b,c]}}}

方法2:手动遍历拆分(适合理解底层逻辑)

如果你不想依赖正则相关API,也可以手动遍历字符串,精准查找分隔符位置来拆分,完全是字面量匹配:

import java.util.ArrayList;
import java.util.List;

public class ManualSplitDemo {
    public static void main(String[] args) {
        String str = "{A={111={i=[a,b,c],ii=[e,f]}, 222={iii=[a,e]}}, B={333={i= [b,c]}}}";
        String separator = "}},";
        List<String> splitResult = new ArrayList<>();
        int sepLength = separator.length();
        int currentPos = 0;
        
        while (currentPos <= str.length()) {
            // 从当前位置开始查找分隔符
            int sepIndex = str.indexOf(separator, currentPos);
            if (sepIndex == -1) {
                // 找不到分隔符,添加剩余部分
                splitResult.add(str.substring(currentPos));
                break;
            }
            // 添加当前位置到分隔符前的子串
            splitResult.add(str.substring(currentPos, sepIndex));
            // 移动指针到分隔符结束的位置
            currentPos = sepIndex + sepLength;
        }
        
        // 输出结果
        for (String part : splitResult) {
            System.out.println("拆分片段:" + part);
        }
    }
}

为啥不能直接用split("}},")?

虽然在这个特定字符串里直接用split("}},")可能得到正确结果,但这是巧合!如果你的分隔符包含正则特殊字符(比如.、*、+等),直接传入会被当作正则规则解析,导致匹配错误。比如分隔符是.,时,split(".,")会匹配任意字符+逗号,而不是字面量的.,。所以用字面量匹配的方式更通用、更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:02:05