实现一个mini parser, 输入是以下格式的string:"324" or"[123,456,[788,799,833],[[]],10,[]]"
要求输出:324 or [123,456,[788,799,833],[[]],10,[]].
也就是将字符串转换成对应的格式的数据.
输入一个数组的字符串, 要返回一个数组, 里面每一个元素是要么一个整数, 要么是一个数组.
但是注意数组可以多层嵌套.
Solution:
public class NestedIntList { private int value; private List<NestedIntList> intList; private boolean isNumber; public NestedIntList(int v) { this.value = v; this.isNumber = true; } public NestedIntList() { this.intList = new ArrayList<>(); this.isNumber = false; } public void add(NestedIntList l) { intList.add(l); } public static NestedIntList fromString(String s) { if(!s.startsWith("[")) { return new NestedIntList(Integer.parseInt(s)); } NestedIntList result = null; Stack<NestedIntList> stack = new Stack<>(); int i = 0, left = 1; while(i < s.length()) { char c = s.charAt(i); if(c == '[') { NestedIntList num = new NestedIntList(); if(!stack.isEmpty()) { stack.peek().add(num); } stack.push(num); left = i+1; } else if(c == ',' || c == ']') { if(left != i) { int v = Integer.parseInt(s.substring(left, i)); NestedIntList num = new NestedIntList(v); stack.peek().add(num); } left = i+1; if(c == ']') result = stack.pop(); } i++; } return result; } public String toString() { if(isNumber) { return ""+value; } else { return intList.toString(); } } public static void main(String[] args) { NestedIntList list = NestedIntList.fromString("[123,456,[788,799,833],[[]],10,[]]"); System.out.println(list); } }