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

如何使用"},{"表达式分割字符串?String.split()结果异常求助

解决用"},{"分割字符串时split()结果不符合预期的问题

哦,这个坑我之前踩过!问题出在String.split()的参数本质是正则表达式,而你要用来分割的"},{"里的{和}都是正则中的特殊元字符(用来定义量词范围,比如{1,3}表示匹配1到3次),直接传入的话,正则引擎会把它们当成语法符号解析,而不是普通的字符串,自然得不到正确的分割结果。

下面给你两种解决方案,按需选择:

方案1:用Pattern.quote()包裹分隔符(推荐)

Java提供了Pattern.quote()方法,可以把任意字符串转换成正则字面量,让正则引擎完全把它当成普通文本处理,不用手动转义特殊字符,非常省心。

示例代码:

import java.util.regex.Pattern;

public class SplitTest {
    public static void main(String[] args) {
        String input = "{\"Id\":\"620e1fe3f6f0b48fd385edebdc5896e4865d0c8a1a49ca24b9f8b08a4a1bc17e\",\"Names\":[\"/delete2alpine\"],\"Image\":\"alpine\",\"Command\":\"/bin/sh\"},{\"Id\":\"dfc8494f4b9cc3a409a01032906431b54a2d88bb06b4fed26ede0eb8a37c41a9\",\"Names\":[\"/deletealpine\"],\"Image\":\"alpine\",\"Command\":\"/bin/sh\"}";
        
        // 使用Pattern.quote()处理分隔符
        String[] splitResult = input.split(Pattern.quote("},{"));
        
        // 处理首尾的多余符号:第一个元素开头的{,最后一个元素结尾的}
        splitResult[0] = splitResult[0].substring(1);
        splitResult[splitResult.length - 1] = splitResult[splitResult.length - 1].substring(0, splitResult[splitResult.length - 1].length() - 1);
        
        // 打印结果
        for (String part : splitResult) {
            System.out.println("分割后的JSON对象:");
            System.out.println(part);
        }
    }
}

方案2:手动转义正则特殊字符

如果你不想引入Pattern类,也可以手动把{和}转义成正则中的字面量。在正则里,特殊字符需要用\转义,而Java字符串中\本身需要再转义一次(变成\\),所以最终的分隔符字符串是"\\}\\,\\{"。

示例代码:

public class SplitTest {
    public static void main(String[] args) {
        String input = "{\"Id\":\"620e1fe3f6f0b48fd385edebdc5896e4865d0c8a1a49ca24b9f8b08a4a1bc17e\",\"Names\":[\"/delete2alpine\"],\"Image\":\"alpine\",\"Command\":\"/bin/sh\"},{\"Id\":\"dfc8494f4b9cc3a409a01032906431b54a2d88bb06b4fed26ede0eb8a37c41a9\",\"Names\":[\"/deletealpine\"],\"Image\":\"alpine\",\"Command\":\"/bin/sh\"}";
        
        // 手动转义特殊字符
        String[] splitResult = input.split("\\}\\,\\{");
        
        // 同样处理首尾符号
        splitResult[0] = splitResult[0].substring(1);
        splitResult[splitResult.length - 1] = splitResult[splitResult.length - 1].substring(0, splitResult[splitResult.length - 1].length() - 1);
        
        // 打印结果
        for (String part : splitResult) {
            System.out.println("分割后的JSON对象:");
            System.out.println(part);
        }
    }
}

额外建议:用JSON解析库处理更健壮

其实你这个输入本质是多个JSON对象拼接而成,最规范的做法是把它转换成合法的JSON数组(给首尾加[]),然后用JSON解析库(比如Gson、Jackson)来解析,这样即使后续JSON结构变得复杂(比如嵌套对象),也不会出现分割错误的问题。

示例(用Gson):

import com.google.gson.Gson;
import com.google.gson.JsonArray;

public class JsonParseTest {
    public static void main(String[] args) {
        String input = "{\"Id\":\"620e1fe3f6f0b48fd385edebdc5896e4865d0c8a1a49ca24b9f8b08a4a1bc17e\",\"Names\":[\"/delete2alpine\"],\"Image\":\"alpine\",\"Command\":\"/bin/sh\"},{\"Id\":\"dfc8494f4b9cc3a409a01032906431b54a2d88bb06b4fed26ede0eb8a37c41a9\",\"Names\":[\"/deletealpine\"],\"Image\":\"alpine\",\"Command\":\"/bin/sh\"}";
        
        // 转换成合法的JSON数组字符串
        String jsonArrayStr = "[" + input + "]";
        
        // 用Gson解析
        Gson gson = new Gson();
        JsonArray jsonArray = gson.fromJson(jsonArrayStr, JsonArray.class);
        
        // 遍历每个JSON对象
        for (int i = 0; i < jsonArray.size(); i++) {
            System.out.println("解析后的JSON对象:");
            System.out.println(jsonArray.get(i).toString());
        }
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:32