2014-12-11 56 views
0

我有以下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括号都会创建一个新的子级别。两个相同等级之间的创建新的兄弟姐妹。

更新 - 完

我已经尝试了多种方法就像把一个级别的时间和得到下一个元素,并与现有的字符串添加,但未能拿出一个解决方案。

请帮忙。提前致谢。

+0

你有太多的引号我不知道你想用这个String来做什么,但是你需要首先删除所有额外的标记,否则你只会得到大量的编译器错误String level =“(subject:\ Chemistry \ OR(course:\ Organic Chemistry \ OR course:\ Inorganic Chemistry \ OR(unit:\ unit1 \)))”; – 2014-12-11 04:23:42

+0

@DavidColer。我已经更新了这个问题。我需要双引号,因为如果主题具有** A或B **的值,可能会引起混淆。而且,由于双引号解析正确,因此不会出现编译错误。 – KarthiK 2014-12-11 05:00:57

回答

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(); 
} 

这是你正在尝试做什么?

+0

我很欣赏你的尝试。但是,它不会给出关卡的组合。请检查我的问题更新。 – KarthiK 2014-12-12 09:33:41