正则表达式不适用于番石榴

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

任何帮助,将不胜感激.

Dar*_*hta 5

你必须使用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)

  • 或者分割器onPattern(String separatorPattern)方法. (2认同)
  • @MehrajMalik这本书讲的是"Splitter"类,而不是关于`on`方法.如果你想要正则表达式拆分:`Splitter.onPattern(...)`,如果你想要文字拆分:`Splitter.on(...)`.可以调整答案以使其更加明显. (2认同)