我试图在字符串中解析任意嵌套的数组,以这种格式:[3,[4,3],5]
,到列表(列表,列表…)
List(3, List(4, 3), 5)
我写了一些代码(在这个问题之前的编辑中),但我的草稿都不起作用。我可以有一个示例实现或一些伪代码?
将嵌套数组解析为这样的String相当简单:
Arrays.deepToString(array).replace(" ", "");
将此String转换为无限嵌套列表有点棘手。最简单的解决方案可能是使用递归:
/**
* The following code is only for demonstration purposes.
* It does neither do any validation on the input String
* nor work with more than one digit numbers.
*/
static int index = 0; // the position in the String
Object buildList(String nestedList) {
List<Object> list = new ArrayList<>();
while (index < nestedList.length()) {
char c = nestedList.charAt(index++);
if (c == '[') // add a sub-list via a recursive call
list.add(buildList(nestedList));
else if (c == ']') // stop building the list
break;
else if (c == ',') {} // do nothing
else // add an element to the list
list.add(c);
}
return list;
}
示例调用:
System.out.println(buildList("[3,[4,3],5]")); // prints [3, [4, 3], 5]
注意:
尽管上面的代码达到了(至少我认为)您想要达到的目的,但在实践中使用这种数据结构可能是不明智的,因为对嵌套列表的访问相当复杂,并且涉及到一些类型转换。
一个更好的解决方案可能是使用某种树-数据结构,其中每个节点都有一个值列表,包括到其他节点的链接。(参见:http://en.wikipedia.org/wiki/Tree_ (data_structure))