0

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

"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 来做到这一点,还是我需要手动解析字符串?如果我需要手动解析它,是否有一个很好的算法示例?

4

1 回答 1

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
于 2017-10-10T15:50:51.907 回答