在玩 Guava 时,我可以将split设置为单个字符,字符串或正则表达式。

我想要的是在多个输入上拆分而不必诉诸使用正则表达式,因为我想使用方法调用来建立分隔符。

我正在尝试做的就是让它让我做类似的事情:

Splitter.on(',')
    .on('.')
    .on('|')
    .on("BREAK")
    .splitToList(test);

因此,对于输入“a,b,c.d | e BREAK f”将产生一个包含a/b/c/d/e/f的列表。

这是在我正在编写的类中完成的,因此在进行调用以最终处理数据并将其用作唯一的.on()调用时,也许可以根据输入构造一个正则表达式?

谢谢。

最佳答案

正如@Louis Wasserman指出的那样,您想在此处使用正则表达式。您可以使用Splitter.on(Pattern)Splitter.onPattern(String)来完成此操作,并构造一个正则表达式以匹配分隔符,例如([,.|]|BREAK)

这是我的测试方法。对于CharMatcher方法,此测试失败,并且使用正则表达式成功。

public class SplitterTest {
    public String splitAndRejoin(String pre) {
        return Joiner.on("/").join(
            Splitter
                .onPattern("([,.|]|BREAK)")
                .trimResults()
                .omitEmptyStrings()
                .split(pre));
    }

    @Test
    public void test1() {
        assertEquals("a/b/c/d/e/f", splitAndRejoin("a,b,c.d|e BREAK f"));
        assertEquals("A/B/C/D/E/F", splitAndRejoin("A,B,C.D|E BREAK F"));
    }
}

关于java - 具有多个分割参数的 Guava 分割器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21100247/

10-13 09:17