Meh*_*lik 2 java regex string split guava
我正在使用guava 21.0
并尝试String
通过提供正则表达式(\\d
)来拆分.但是,我不确定为什么不工作.
如果我将正则表达式更改为任何非正则表达式(例如"a"),那么它可以正常工作.
这是代码:
public class SplitWithRegex {
public static Iterable<String> splitByRegex(String string, String regex){
return Splitter.on(regex).trimResults().omitEmptyStrings().split(string);
}
public static void main(String[] args) {
Iterable<String> itr = splitByRegex("abc243gca87asas**78sassnb32snb1ss22220220", "\\d");
for(String s : itr){
System.out.println(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
应用正则表达式时的结果:
abc243gca87asas**78sassnb32snb1ss22220220
任何帮助,将不胜感激.
你必须使用Splitter.onPattern("\\d+")
而不是Splitter.on("\\d+")
.
这是 Splitter on
方法的javadoc ,它就是这样说的:
返回使用给定固定字符串作为分隔符的拆分器.例如,Splitter.on(",").split("foo,bar,baz")返回包含["foo","bar,baz"]的迭代.
因此,分隔符被视为String
文字,而不是regex
因此,它不会String
按预期分割.如果你想要基于正则表达式的拆分,那么你可以使用String的split
方法或Splitter的onPattern
方法,例如:
String[] tokens = "abc243gca87asas**78sassnb32snb1ss22220220".split("\\d+");
for(String token : tokens){
System.out.println(token);
}
public static Iterable<String> splitByRegex(String string, String regex){
return Splitter.onPattern(regex).trimResults().omitEmptyStrings().split(string);
}
Run Code Online (Sandbox Code Playgroud)