我正在寻找一种方法(算法或 Java 代码)来解析带有多级括号的字符串,如下所示:
(Level 1
(Level 1.1
(Level 1.1.1)
(Level 1.1.2)
(Level 1.1.3)
)
(Level 1.2
(Level 1.2.1)
(Level 1.2.2)
(Level 1.2.3)
)
)
到具有结构的节点:
我尝试在递归方法中使用 text.substring(text.indexOf('(') + 1 , text.lastIndexOf(')') - 1)
,但它没有'如果同一级别的括号很少,则无法正常工作。
最佳答案
如果你想练习递归检查这个:
public class Grouping {
private static final String data = "(Level 1 \n" +
" (Level 1.1\n" +
" (Level 1.1.1)\n" +
" (Level 1.1.2)\n" +
" (Level 1.1.3)\n" +
" )\n" +
" (Level 1.2\n" +
" (Level 1.2.1)\n" +
" (Level 1.2.2)\n" +
" (Level 1.2.3)\n" +
" )\n" +
")";
public static void main(String[] args) {
String s = data.replaceAll("\n", "").trim();
System.out.println(s);
char[] chars = s.toCharArray();
Data data = createData(chars);
System.out.println(data);
}
private static Data createData(char[] chars) {
Data result = new Data();
for (int i = 1; i < chars.length; i++) {
result.length++;
if (chars[i] == ')') {
return result;
}
if (chars[i] == '(') {
Data data = createData(Arrays.copyOfRange(chars, i, chars.length));
i += data.length;
result.length += data.length;
result.nested.add(data);
} else result.name.append(chars[i]);
}
return result;
}
}
class Data {
StringBuilder name = new StringBuilder();
int length = 0;
List<Data> nested = new ArrayList<>();
}
如果你想做一些有用的东西,最好坚持使用已经发明的数据结构,如 json、xml 等,以及由它们改进的工具。玩得开心!
关于java - 解析多级括号之间的字符串到节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57250087/