使用Guava我可以将分割设置为单个字符,字符串或正则表达式。
我想要的是分割多个输入而不必使用正则表达式,因为我想使用方法调用来构建分隔符。
我要做的就是让它让我做类似的事情:
Splitter.on(',')
.on('.')
.on('|')
.on("BREAK")
.splitToList(test);
因此,输入“a,b,c.d | e BREAK f”将产生一个包含/ b / c / d / e / f的列表。
这是在我正在写的一个类中完成的,所以当调用最终处理数据并将其用作唯一的.on()调用时,可能会从输入构造一个正则表达式?
感谢。
答案 0 :(得分:7)
正如@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"));
}
}