0

我有一个像 'abc \'abc\' "123" 12\\'3' 这样的字符串。

我想做的是像 Unix 终端一样解析它。有没有办法在不处理复杂的正则表达式的情况下做到这一点?

例子: java -jar foo.jar abc 'abc' "123" 12\'3

将成为这个字符串数组["abc","abc","123","12'3"]

Java中是否有任何内置的库/功能可以让我这样做?

4

1 回答 1

0

您可以编写自己的解析器(为简化起见,我建议您使用 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,以便最终获得所有字符串的列表。

于 2013-06-05T18:13:04.360 回答