java 树形解析_java如何将复杂字符串解析为树形结构?
以下面字符串为例(三种情况都有),初略搞了下&:(|(2):4,5,3708,3709),609,610,6042,612,7980,(|:845,839),535,7674,7979,11531import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sf.json.JSONArray;
public class Test {
public static void main(String[] args) {
String s = “&:(|(2):4,5,3708,3709),609,610,6042,612,7980,(|:845,839),535,7674,7979,11531”;
String regex = “\\(“
+ “[^\\(\\)]*“
+ “(“
+ “\\(“
+ “[^\\(\\)]*“
+ “\\)”
+ “[^\\(\\)]*“
+ “)*“
+ “\\)”;
String required = s.replaceAll(regex, “”).replaceAll(“&:,”, “”).replaceAll(“,,”, “,”);
System.out.println(required);
// 必修节点
Map requiredNode = new HashMap<>();
List> requiredList = new ArrayList<>();
if(null != required && required.length() > 0) {
for(String str : required.split(“,”)) {
Map node = new HashMap<>();
node.put(“text”, str);
requiredList.add(node);
}
}
requiredNode.put(“text”, “必修”);
// 多选一节点
Map optionsNode = new HashMap<>();
List> optionsList = new ArrayList<>();
optionsNode.put(“text”, “(多选一)”);
// 选修N
Map optionsNNode = new HashMap<>();
List> optionsNList = new ArrayList<>();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(s);
while(matcher.find()) {
String result = matcher.group();
System.out.println(result);
String flag = String.valueOf(result.charAt(2));
String N = result.substring(result.lastIndexOf(“(“)+1, result.indexOf(“)”));
String str = result.substring(result.indexOf(“:”)+1, result.length()-1);
System.out.println(str);
if (flag.equals(“:”)) {
if(null != str && str.length() > 0){
for(String text : str.split(“,”)) {
Map node = new HashMap<>();
node.put(“text”, text);
optionsList.add(node);
}
}
} else if (flag.equals(“(“)) {
optionsNNode.put(“text”, “(选修”+N+”)”);
if(null != str && str.length() > 0){
for(String text : str.split(“,”)) {
Map node = new HashMap<>();
node.put(“text”, text);
optionsNList.add(node);
}
}
}
}
// 组装数据结构
optionsNode.put(“children”, optionsList);
optionsNNode.put(“children”, optionsNList);
requiredList.add(optionsNode);
requiredList.add(optionsNNode);
requiredNode.put(“children”, requiredList);
List> root = new ArrayList<>();
root.add(requiredNode);
System.out.println(JSONArray.fromObject(root));
}
}
生成JSON字符串:[{“text”:”必修”,”children”:[{“text”:”609”},{“text”:”610”},{“text”:”6042”},{“text”:”612”},{“text”:”7980”},{“text”:”535”},{“text”:”7674”},{“text”:”7979”},{“text”:”11531”},{“text”:”(多选一)”,”children”:[{“text”:”845”},{“text”:”839”}]},{“text”:”(选修2)”,”children”:[{“text”:”4”},{“text”:”5”},{“text”:”3708”},{“text”:”3709”}]}]}]
基本符合Easyui Tree组件,但是没有ID需要你自己根据业务来决定ID,如图:
还没有评论,来说两句吧...