我有一个像 'abc \'abc\' "123" 12\\'3' 这样的字符串。
我想做的是像 Unix 终端一样解析它。有没有办法在不处理复杂的正则表达式的情况下做到这一点?
例子:
java -jar foo.jar abc 'abc' "123" 12\'3
将成为这个字符串数组["abc","abc","123","12'3"]
Java中是否有任何内置的库/功能可以让我这样做?
您可以编写自己的解析器(为简化起见,我建议您使用 Guava 及其CharMatcher
匹配字符)或使用现有的解析器库。我个人最喜欢的是Parboiled,因为您可以用Java编写语法。
例如,这个非常粗糙的语法会分解成只包含字母的单词(但是请注意,我的 parboiled-fu 有点生疏):
Rule Spaces()
{
return OneOrMore(AnyOf(" \t"));
}
Rule Letter()
{
return Range('a', 'z');
}
Rule Word()
{
return OneOrMore(IgnoreCase(Letter());
}
Rule OneLine()
{
// EOI == End Of Input
return Sequence(Optional(Spaces()), Word(),
ZeroOrMore(Sequence(Spaces(), Word()), EOI);
}
有一个堆栈可以将值推送到 etc,以便最终获得所有字符串的列表。