实现一个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);
}
}