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,提问作者Влад
相关产品推荐
相关产品推荐

