java - 如何将字符串切成这样的数组?

标签 java string split

<分区>

我正在尝试拆分这样一个字符串:

[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/

相关文章:

java - Java 的不一致行为 ==

c++ - 比较字符串元素与字符串

python - Pandas 数据框列删除第一个特定字符之前的字符串

java - 分割一个sql结果集,然后使用数组的每一部分进行查询

java - Rest、Rest Api、Web Service、RestFul Api 之间的区别

java - 忽略 CSV 文件中的无效对象

java - 对象消息未在 Activemq 中反序列化

java - 如何进行 Java (Android) 字符串替换?

Java:最终字符串比较不起作用

Java 从字符串中删除/删除多个单词