java 树形解析_java如何将复杂字符串解析为树形结构?

梦里梦外; 2022-11-03 10:57 484阅读 0赞

以下面字符串为例(三种情况都有),初略搞了下&:(|(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,如图:

5f44669d9023f819b9cfa4031178418d.png

发表评论

表情:
评论列表 (有 0 条评论,484人围观)

还没有评论,来说两句吧...

相关阅读