正则表达式在番石榴中不起作用

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);
}