在Java中查找嵌套标签之间的子串

时间:2017-10-10 15:43:36

标签: java nested substring apache-stringutils

我正在研究一种方法,该方法需要将表示Type声明的字符串解析为其组成部分。例如,字符串

"List<T extends Integer>"

将生成以下数组:

["List", "T", "extends", "Integer"]

对于像这样的简单情况,我可以使用apache-commons的StringUtils类的'substringsBetween'方法来查找标记内的部分。我遇到的问题是substringsBetween方法似乎无法处理嵌套标记。如果我拨打以下电话:

StringUtils.substringsBetween("HashSet<ArrayList<T extends Integer>>", "<", ">");

我的结果是:

["ArrayList<T extends Integer"]

有没有办法使用apache commons做到这一点,还是我需要手工解析字符串?如果我需要手动解析它,是否有一个很好的算法示例呢?

1 个答案:

答案 0 :(得分:0)

您可以拆分空格并更改要忽略的字符括号。

例如......

    String example = "List<T extends Integer>";
    example = example.replace('<', ' ').replace('>', ' ');
    String[] word = example.split(" ");
    for(int i=0; i< word.length;i++) {
        System.out.print(word[i]+" ");
    }

如果您希望内括号具有相同的行为,您可以执行相同的操作,只需解析字符串中的唯一字符。

String exampleTwo ="HashSet<ArrayList<T extends Integer>>";
exampleTwo = exampleTwo.replace('<', '-').replace('>', '-');
String[] innerWord = exampleTwo.split("-");
for(int i=0; i< innerWord.length;i++) {
    System.out.print(innerWord[i]+" ");
}

//position is the same number of brackets
System.out.println(innerWord[0]); //HashSet
System.out.println(innerWord[1]); //ArrayList
System.out.println(innerWord[2]); //T extends Integer