首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分类学级解析

分类学级解析
EN

Stack Overflow用户
提问于 2014-12-11 04:18:10
回答 1查看 97关注 0票数 0

我有下面的java代码。

代码语言:javascript
复制
List<String> resultList = new ArrayList<String>();    
String taxonomyLevels = "(subject:\"Chemistry\" OR (course:\"Organic Chemistry\" OR course:\"Inorganic Chemistry\" OR (unit:\"unit1\")))";

在这里,学科、课程和单元是分类学的层次。双引号中的值是每个级别的值。我需要所有分类级别的组合,

我希望在resultList中解析并返回这个文件。返回的列表应该具有以下值:

代码语言:javascript
复制
"subject:\"Chemistry\""
"subject:\"Chemistry\"&course:\"Organic Chemistry\""
"subject:\"Chemistry\"&course:\"Inorganic Chemistry\""
"subject:\"Chemistry\"&course:\"Inorganic Chemistry\"&unit:\"unit1\""

更新-启动

对于以下输入,

代码语言:javascript
复制
taxonomyLevels = "(subject:\"something1\" OR (course:\"somethingElse\" OR (unit:\"abcd test\" OR unit:\"efgh\") OR course:\"c2\" OR (unit:\"u2\")))";

输出列表应该是,

代码语言:javascript
复制
"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\""

这是分类级别的组合。换句话说,需要学科、课程和单元的结合。

这是一种树结构。每个打开括号创建一个新的子级别。两个相同级别之间的创建新的兄弟姐妹。

更新-结束

我尝试过几种方法,比如一次取一个级别,获取下一个元素并添加现有的字符串,但无法提供解决方案。

请帮帮忙。提前谢谢。

EN

回答 1

Stack Overflow用户

发布于 2014-12-11 11:43:01

代码语言:javascript
复制
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();
}

这就是你想做的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27415304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档