如何处理java中对{},[],() 的解析,不仅可以用正则,也
2019-07-31 本文已影响0人
爱吃苹果的西瓜
- 首先把字符串中的{,[,(压入栈,循环字符串,把},],)出栈。
- 再用一个map存放{},[],() 。判断最后一个出栈的元素是否和第一个入栈的元素是否符合map。
- 如果不符合,则出入的参数有误
- 再把通过split的字符串进行拼接成自己想要的样子,就可以啦!
public static String[] getSplitString(String param) {
String[] rawParams = param.split(",");
int len = rawParams.length;
ArrayStack stack = new ArrayStack(param.length());
Map<String, String> map = new HashMap<>();
map.put("{", "}");
map.put("[", "]");
map.put("(", ")");
String[] gParams = new String[len];
int index = 0;
StringBuffer buffer = new StringBuffer();
for (int i = 0; i < len; i++) {
char[] c = rawParams[i].toCharArray();
int l = c.length;
for (int j = 0; j < l; j++) {
if (c[j] == 91 || c[j] == 123 || c[j] == 40) {
stack.push(c[j]);
}
if (c[j] == 93 || c[j] == 125 || c[j] == 41) {
String temp = String.valueOf(stack.pop());
if (c[j] != map.get(temp).toCharArray()[0]) {
return null;
}
}
}
if (stack.size() > 0) {
buffer.append(rawParams[i]);
buffer.append(",");
} else {
gParams[index] = buffer.append(rawParams[i]).toString();
index++;
buffer = new StringBuffer();
}
}
int glen = gParams.length;
for (int k = 0; k < glen ; k++) {
if (null == gParams[k]) {
continue;
}
char[] chars = gParams[k].toCharArray();
int l = chars.length;
if (chars[0] == 34 || chars[0] == 39) {
gParams[k] = String.valueOf(chars, 1, l - 2);
}
}
return gParams;
}