你可以這樣做:
- 遍歷字符串由左到右,收集字符到當前字符串變量。
- 如果遇到
;
把當前字符串中的數據結構保持(level, array of menu entries for level)
。
- 如果遇到
[
與其他字符串和level + 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;
}
東西遞歸 – Tom 2012-02-20 21:23:12