Java - 有关使用 "split()"的帮助

标签 java regex split

我正在尝试用java编写一段代码,其功能类似于Java中的“split()”命令,但不会删除与正则表达式匹配的部分。例如:

String str = "ABC---DEF***GHI///JKL#@!"; 

然后

`str.split("[A-Za-z0-9]+")` returns `{"---", "***", "///", "#@!"}`. 

但是,我想编写一个类似于 split() 的方法,它拆分正则表达式的 AT 匹配字符串,而不是 AROUND 它。

`An example of an implementaion would be: 
public static String[] splitString(String input, String regex)` 

因此:

`splitString("ABC---123DEF***456GHI///JKL9#@6!", "[A-Za-z0-9]+")` 

会给出:

`{"ABC", "---", "123DEF", "***", "456GHI", "///", "JKL9", "#@", "6", "!"}` 

最佳答案

正如其他发帖者所指出的,实现此目的的一种方法是使用您的模式,然后使用相反的模式。这可以通过单个正则表达式来完成,([A-Za-z0-9]*)([^A-Za-z0-9]*)

String str = "ABC---DEF***GHI///JKL#@!";
Matcher m = Pattern.compile("([A-Za-z0-9]*)([^A-Za-z0-9]*)").matcher(str);
List<String> result = new ArrayList<>();
while(m.find()) {
    for(int i=1; i<=m.groupCount(); i++) {
        if(!m.group(i).isEmpty()) {
            result.add(m.group(i));
        }
    }
}
System.out.println(StringUtils.join(result, ", "));

输出:

ABC, ---, 123DEF, ***, 456GHI, ///, JKL9, #@, 6, !

关于Java - 有关使用 "split()"的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29824609/

相关文章:

java - 当 GC 暂停持续时间超过平均响应时间时,如何限制 webapp 中的并发?

java - Android 应用程序启动时不显示 GIF

javascript - 如何获取集合名称为 '%2015%' 的所有集合

xcode4 - 如何关闭拆分窗口/相邻编辑器 - Xcode 4

javascript - 获取数组内字符串的第一个单词 - 从返回 REST

java - 需要使用另一个子类的对象调用接口(interface)的一个子类

java - Neo4J-Java : Result incomplete

mysql - 字符类不适用于阿拉伯文本列

PHP正则表达式匹配以特殊字符开头的行

bash - 如何在 bash 中拆分由制表符分隔的字符串