<分区>
我正在尝试拆分这样一个字符串:
[a05, [a24, a23], [b08, b09], c26, c30, a22, a13, m06]
分为以下几个部分:
a05
[a24, a23]
[b08, b09]
c26
c30
a22
a13
m06
也就是说,拆分 ,
但将 [...]
视为一个标记,即使它包含 ,
。
<分区>
我正在尝试拆分这样一个字符串:
[a05, [a24, a23], [b08, b09], c26, c30, a22, a13, m06]
分为以下几个部分:
a05
[a24, a23]
[b08, b09]
c26
c30
a22
a13
m06
也就是说,拆分 ,
但将 [...]
视为一个标记,即使它包含 ,
。
最佳答案
这是一种使用正则表达式的方法:
String input = "[a05, [a24, a23], [b08, b09], c26, c30, a22, a13, m06]";
// Strip outer [...]
String content = input.substring(1, input.length() - 1);
List<String> parts = new ArrayList<>();
Matcher m = Pattern.compile("\\[.*?\\]|[^\\[, ]+").matcher(content);
while (m.find()) {
parts.add(m.group());
}
parts.forEach(System.out::println);
输出:
a05
[a24, a23]
[b08, b09]
c26
c30
a22
a13
m06
正则表达式分解:
\[.*?\]
-- 形式为 [...]
|
——或者[^\[, ]+
-- 一个或多个不是[
, ,
或空格的字符。也许我从字面上理解了你的例子。如果上述方法不起作用,请随意使用更复杂的案例扩展您的示例。
请注意,正则表达式可以表达的内容非常有限,并且仅适用于输入相当可预测的情况。如果您发现需要任意嵌套方括号 [...[...]...]
或类似情况,您必须做更多的工作。 “下一步”可能是“手动”循环/解析输入或编写上下文无关语法并使用解析器生成器。
关于java - 如何将字符串切成这样的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56239828/