我正在尝试用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/