我有以下java代码。
List<String> resultList = new ArrayList<String>();
String taxonomyLevels = "(subject:\"Chemistry\" OR (course:\"Organic Chemistry\" OR course:\"Inorganic Chemistry\" OR (unit:\"unit1\")))";
在这里,主题,课程和单元是分类学中的水平。双引号中的值是每个级别的值。我想要所有分类级别的组合。
我希望在resultList中解析并返回它。返回的列表应具有以下值,
"subject:\"Chemistry\""
"subject:\"Chemistry\"&course:\"Organic Chemistry\""
"subject:\"Chemistry\"&course:\"Inorganic Chemistry\""
"subject:\"Chemistry\"&course:\"Inorganic Chemistry\"&unit:\"unit1\""
更新 - 开始
对于以下输入,
taxonomyLevels = "(subject:\"something1\" OR (course:\"somethingElse\" OR (unit:\"abcd test\" OR unit:\"efgh\") OR course:\"c2\" OR (unit:\"u2\")))";
输出列表应为,
"subject:\"Chemistry\""
"subject:\"Chemistry\"&course:\"Organic Chemistry\""
"subject:\"Chemistry\"&course:\"Organic Chemistry\"&unit:\"unit2\""
"subject:\"Chemistry\"&course:\"Organic Chemistry\"&unit:\"unit3\""
"subject:\"Chemistry\"&course:\"Inorganic Chemistry\""
"subject:\"Chemistry\"&course:\"Inorganic Chemistry\"&unit:\"unit1\""
这是分类法的级别组合。换句话说,需要主题,课程和单元的组合。
它是一种树状结构。每个Open括号创建一个新的子级别。两个相同级别之间的 OR 会创建新的兄弟姐妹。
更新 - 结束
我尝试了几种方法,例如一次获取一个级别并获取下一个元素并添加现有字符串,但无法提供解决方案。
请帮忙。提前谢谢。
答案 0 :(得分:0)
private ArrayList<String> resultList = new ArrayList<String>();
private String taxonomyLevels = "(subject:\"Chemistry\" OR (course:\"Organic Chemistry\" OR course:\"Inorganic Chemistry\" OR (unit:\"unit1\")))";
public ArrayList<String> parse() {
String[] temp = taxonomyLevels.split(" OR ");
String[] clean = new String[temp.length];
for(int i = 0; i<temp.length;i++){
clean[i] = cleanUp(temp[i]);
}
resultList.add(clean[0]);
resultList.add(clean[0]+"&"+clean[1]);
resultList.add(clean[0]+"&"+clean[2]);
resultList.add(clean[0]+"&"+clean[2]+"&"+clean[3]);
return resultList;
}
private String cleanUp(String s){
char[] chars = s.toCharArray();
StringBuilder sb = new StringBuilder();
for(char c:chars){
if(c!='(' && c!=')')sb.append(c);
}
return sb.toString();
}
这是你想要做的吗?