我正在使用guava 21.0
并尝试通过提供正则表达式(\\d
)来分割String
。
但是,我不确定为什么不起作用。
如果我将正则表达式更改为非正则表达式的任何内容(例如“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);
}
}
}
应用正则表达式时的结果:
abc243gca87asas**78sassnb32snb1ss22220220
如有任何帮助,我们将不胜感激。
最佳答案
您必须使用 Splitter.onPattern("\\d+")
而不是 Splitter.on("\\d+")
。
Here's Splitter 的 on
方法的 javadoc 是这样的:
Returns a splitter that uses the given fixed string as a separator. For example, Splitter.on(", ").split("foo, bar,baz") returns an iterable containing ["foo", "bar,baz"].
因此,分隔符被视为String
文字,而不是正则表达式
,因此,它不会按预期拆分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);
}
关于java - 正则表达式在 Guava 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44041179/