正则表达式在番石榴中不起作用
regex is not working in guava
我正在使用 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
文字而不是 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);
}
我正在使用 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
文字而不是 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);
}