java - 正则表达式在 Guava 中不起作用

标签 java regex string split 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文字,而不是正则表达式,因此,它不会按预期拆分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/

相关文章:

java - Spring @Transactional on @Bean 声明而不是类实现

java - 正则表达式无法提取键值对

c - 整数到 IP 地址 - C

cocoa - 如何将 NSArray 元素连接到 NSString 中?

java - 如何在页面zk框架中触发任何选定的手动事件时保存文本框值

java - 将 PropertyChangeListener 添加到多个 JComboBox

regex - 如何编写代码以识别正则表达式是否与给定字符串匹配?

php - 使用来自友好 url 的数据并使用正则表达式在 mysql 中获取行

python - 使用 Pandas 从数据框的所有项目中删除字符串

java - 在java中压缩字符串的简单方法?