【发布时间】:2017-10-10 15:43:35
【问题描述】:
我正在研究一种方法,该方法需要将表示类型声明的字符串解析为其组成部分。所以例如字符串
"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 来做到这一点,还是我需要手动解析字符串?如果我需要手动解析,是否有一个很好的算法示例?
【问题讨论】:
-
您对嵌套标签的预期答案是什么?
T extends Integer? -
虽然您可能会破解这一点,但确实感觉好像您正朝着需要一个成熟的解析器迈进。首先拆分为令牌
[ "List", "<", "T", "extends", "Integer", ">" ],然后逐步遍历通过状态机的令牌,以构建解析树。对于 SO 答案来说,这个主题太大了,但请尝试:tomassetti.me/parsing-in-java -
第一步看
StreamTokenizer。 -
@slim 其中一些解析器看起来很有希望。我希望我不必走那条路,但希望我能找到一些轻量级的东西。
标签: java nested substring apache-stringutils