我有一个生成带有许多子菜单的弹出菜单的方法。基本上这些菜单是动态给出的,所以我必须有算法来处理使用下面的字符串创建子菜单。 为了做到这一点,我需要通过使用分隔符拆分将此字符串转换为Java Tree。我坚持如何处理拆分的字符串数据并根据父节点和子节点转换为Java树模型。
我需要解析的动态字符串值的示例:
String str =“Menu1; Menu2; [Menu2A; Menu2B; [Menu2B-A; Menu2B-B];]; Menu3;”;
处理操作后输出应为:
Pop-up Menu
/ | \
Menu1 Menu2 Menu3
/ |
Menu2A Menu2B
| \
| \
Menu2B-A Menu2B-B
答案 0 :(得分:2)
您可以执行以下操作:
;
,请将当前字符串放入包含(level, array of menu entries for level)
的数据结构中。[
调用。]
返回。一些近似的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;
}