在Java中将带有自定义运算符的字符串转换为XML格式 输入是一个包含键、val对和运算符的字符串 运算符支持“和”、“或”、“或”() 操作顺序是从左到右,但以“()”优先 输出是XML格式的字符串

在Java中将带有自定义运算符的字符串转换为XML格式 输入是一个包含键、val对和运算符的字符串 运算符支持“和”、“或”、“或”() 操作顺序是从左到右,但以“()”优先 输出是XML格式的字符串,java,xml,string,recursion,Java,Xml,String,Recursion,例如: 输入01: String input = "001,1399" 输出01: <ITEM key="001" val="1399" /> 输出02: //Same as output01 输入03: String input = "001,1399 OR 002,1399" 输出03: <CONDITION rel="OR" > <ITEM key="001" val="1399" /> <ITEM key="00

例如:

输入01:

String input = "001,1399"
输出01:

<ITEM  key="001"  val="1399" />
输出02:

//Same as output01
输入03:

String input = "001,1399 OR 002,1399"
输出03:

<CONDITION rel="OR" >
    <ITEM  key="001"  val="1399" />
    <ITEM  key="002"  val="1399" />
</CONDITION>
输出04:

<CONDITION  rel="OR" >
    <CONDITION  rel="AND" >
        <CONDITION rel="OR" >
            <ITEM  key="001"  val="1399" />
            <ITEM  key="002"  val="1399" />
        </CONDITION>
        <ITEM  key="011"  val="1564" />
    </CONDITION>
    <ITEM  key="011"  val="1567" />
</CONDITION>
输出05:

<CONDITION  rel="AND" >
    <CONDITION rel="OR" >
        <ITEM  key="001"  val="1399" />
        <ITEM  key="002"  val="1399" />
    </CONDITION>
    <CONDITION  rel="OR" >
        <ITEM  key="011"  val="1564" />
        <ITEM  key="011"  val="1567" />
    </CONDITION>
</CONDITION>

有人能给我一个提示吗?

hint:1)解析表达式(例如,由Basil Bourque建议的Antlr)并构建一个表示输入表达式的树结构。2) 修改树结构以消除不必要的嵌套(在示例中用冗余括号表示)。3) 遍历(修改过的)树并构建输出字符串。提示:1)解析表达式(例如,由Basil Bourque建议的Antlr)并构建表示输入表达式的树结构。2) 修改树结构以消除不必要的嵌套(在示例中用冗余括号表示)。3) 遍历(修改过的)树并生成输出字符串。
<CONDITION  rel="OR" >
    <CONDITION  rel="AND" >
        <CONDITION rel="OR" >
            <ITEM  key="001"  val="1399" />
            <ITEM  key="002"  val="1399" />
        </CONDITION>
        <ITEM  key="011"  val="1564" />
    </CONDITION>
    <ITEM  key="011"  val="1567" />
</CONDITION>
String input = "001,1399 OR 002,1399 AND (011,1564 OR 011,1567)"
<CONDITION  rel="AND" >
    <CONDITION rel="OR" >
        <ITEM  key="001"  val="1399" />
        <ITEM  key="002"  val="1399" />
    </CONDITION>
    <CONDITION  rel="OR" >
        <ITEM  key="011"  val="1564" />
        <ITEM  key="011"  val="1567" />
    </CONDITION>
</CONDITION>