gpt4 book ai didi

java - 如何将字符串解析为Java树?

转载 作者:行者123 更新时间:2023-11-30 04:53:22 25 4
gpt4 key购买 nike

我有一个方法可以生成带有许多子菜单的弹出菜单。基本上这些菜单是动态给出的,所以我必须有算法来处理使用下面的字符串创建子菜单。为了做到这一点,我需要通过使用分隔符分割来将该字符串转换为 Java 树。我被困在如何处理分割的字符串数据并根据父节点和子节点转换为 Java 树模型。

我需要解析的动态字符串值的示例:

String str = "Menu1; Menu2; [Menu2A; Menu2B; [Menu2B-A; Menu2B-B];]; Menu3; ";

处理操作后输出应为:

                                 Pop-up Menu
/ | \
Menu1 Menu2 Menu3
/ |

Menu2A Menu2B
| \
| \
Menu2B-A Menu2B-B

最佳答案

你可以这样做:

  • 从左到右遍历字符串,将字符收集到当前字符串变量中。
  • 如果遇到 ; 将当前字符串放入包含 (级别,级别的菜单条目数组) 的数据结构中。
  • 如果您遇到 [ 递归调用字符串的其余部分和级别 + 1。
  • 如果您遇到]返回。

一些近似的 Java 代码:

private int parseString(String input, String parent, 
Map<String, ArrayList<String>> levels) {

StringBuilder currentString = new StringBuilder();
int index = 0;
while(index < input.length()) {
char c = input.charAt(index);

if(c == ' ') { // ignore spaces
index++;
continue;
}

if(c == ';') { // end of menu entry, add to the list
if(!currentString.toString().isEmpty()) {
levels.put(currentString.toString(), new ArrayList<String>());
levels.get(level).add(currentString.toString());
}
currentString.delete(0, currentString.length());
index++;
continue;
}

if(c == ']') { // end of sublist, return
return index + 1;
}

if(c == '[') { // start of sublist, recursive call
int temp = parseString(input.substring(index + 1),
levels.get(parent).get(levels.get(parent).size() - 1), levels);
index += temp;
index++;
continue;
}

currentString.append(c);
index++;
}
return 0;
}

关于java - 如何将字符串解析为Java树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9368570/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com