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

Java提取指定标识嵌套大括号内全部文本的问题

提取test_two包含嵌套结构的完整大括号内容

你的问题出在只用indexOf('}')找第一个右括号,没考虑嵌套的大括号——嵌套的左括号会让右括号数量不匹配,导致提前截断。

解决思路是计数匹配括号:从test_two对应的左括号开始,遍历字符串,遇到{就给计数器加1,遇到}就减1,当计数器回到0时,就是对应的闭合右括号位置。

下面是修正后的Java代码:

String test = "    test_one{\n     My Text One\n    }\n    test_two{\n     My Text Two\n       sub_test_one{\n         My Sub Text\n        }\n       sub_test_two{\n         My Sub Text\n        }\n    }\n    test_three{\n     My Text Three\n    }";

// 定位test_two的起始位置
int testTwoStart = test.indexOf("test_two");
int openBrace = test.indexOf('{', testTwoStart);
int closeBrace = -1;
int braceCount = 1; // 已经找到一个左括号,初始计数为1

// 从左括号的下一个字符开始遍历
for (int i = openBrace + 1; i < test.length(); i++) {
    char c = test.charAt(i);
    if (c == '{') {
        braceCount++;
    } else if (c == '}') {
        braceCount--;
        // 计数回到0时,找到对应的闭合括号
        if (braceCount == 0) {
            closeBrace = i;
            break;
        }
    }
}

// 提取并输出内容
if (closeBrace != -1) {
    String testTwoContent = test.substring(openBrace + 1, closeBrace).trim();
    System.out.println(testTwoContent);
}

运行这段代码后,输出的完整内容是:

My Text Two
       sub_test_one{
         My Sub Text
        }
       sub_test_two{
         My Sub Text
        }

内容的提问来源于stack exchange,提问作者Влад

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 11:30:51