Guava:分裂并考虑逃跑?

Jmi*_*ini 5 java guava

我对 Guava 的分裂可能性感兴趣:

Splitter.on("|").split("foo|bar|baz");
// => "foo", "bar", "baz"
Run Code Online (Sandbox Code Playgroud)

这工作正常。

如果我想在“|”上拆分,现在该怎么办?但不在“[”和“]”之间:

Splitter.on(something).split("foo|ba[r|ba]z");
// => "foo", "ba[r|ba]z"
Run Code Online (Sandbox Code Playgroud)

据我了解,不可能在番石榴中定义这个“东西”。

我发现这个: Issue 799: Add google escape library to Guava。这有关系吗?

nes*_*983 3

处理这个问题的正确方法是创建一个解析器。如今这真的很容易,只需使用解析器组合器,例如 JParsec。你会得到这样的东西:

class ParserFactory {

    Parser escapedSequence() {
        return Parsers.between(Scanners.string("["), 
            Scanners.anyCharacterButNot("]"), Scanners.string("]"));
    }

    Parser chunk() {
        return Parsers.or(escapedSequence(), Scanners.anyCharacterButNot("|"));
    }

    Parsers wholeThing() {
        return Parsers.separatedBy(chunk().plus(), Scanners.string("|"));
    }
}
Run Code Online (Sandbox Code Playgroud)