【问题标题】:Taxonomy level parsing分类级别解析
【发布时间】:2014-12-11 04:18:10
【问题描述】:

我有以下 java 代码。

List<String> resultList = new ArrayList<String>();    
String taxonomyLevels = "(subject:\"Chemistry\" OR (course:\"Organic Chemistry\" OR course:\"Inorganic Chemistry\" OR (unit:\"unit1\")))";

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

我希望在结果列表中解析并返回它。返回的列表应具有以下值,

"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\""

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

这是一种树状结构。每个开括号都会创建一个新的子级别。 OR 在两个相同级别之间创建新的同级。

更新 - 结束

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

请帮忙。提前致谢。

【问题讨论】:

  • 你的引号太多了我不知道你想用这个字符串做什么,但你需要首先删除所有额外的“”标记,否则你什么也得不到大量编译器错误 String level = "(subject:\Chemistry\ OR (course:\Organic Chemistry\ OR course:\Inorganic Chemistry\ OR (unit:\unit1)))";
  • @DavidColer。我已经更新了这个问题。我需要双引号,因为如果主题的值为 A OR B,它可能会造成混淆。并且,由于正确解析了双引号,因此不会出现编译错误。

标签: java string parsing brackets


【解决方案1】:
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();
}

这是你想要做的吗?

【讨论】:

  • 感谢您的尝试。但是,它不会给出级别的组合。请检查我在问题中的更新。
猜你喜欢
  • 1970-01-01
  • 2015-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-02
  • 2020-09-15
  • 2012-07-24
  • 1970-01-01
相关资源
最近更新 更多