Regex 使用分隔符拆分字符串,如果一个分隔符紧跟另一个分隔符,则检索空白

Regex 使用分隔符拆分字符串,如果一个分隔符紧跟另一个分隔符,则检索空白,regex,split,Regex,Split,很抱歉,如果这是重复的-但我找不到任何相关的问题。(也许我就是找不到适合这种问题的搜索表达式) 在Java中考虑以下字符串: "test:test2+test3++test4:test5+test6" 如您所见,分隔符是:和+ 使用ApacheStringUtils.split(string,“[:+]”方法可以很好地进行拆分,但问题是,如果出现++,则返回的StringArray不包含空白,用于指示存在未使用的值 这意味着我需要以下输出: "test" "test2" "tes

很抱歉,如果这是重复的-但我找不到任何相关的问题。(也许我就是找不到适合这种问题的搜索表达式)

Java中考虑以下字符串:

"test:test2+test3++test4:test5+test6"
如您所见,分隔符是
+

使用Apache
StringUtils.split(string,“[:+]”
方法可以很好地进行拆分,但问题是,如果出现
++
,则返回的
StringArray
不包含空白,用于指示存在未使用的值

这意味着我需要以下输出:

 "test"  
 "test2"  
 "test3"  
 " " <-- whitespace!  
 "test4"  
 "test5"  
 "test6" 
“测试”
“测试2”
“测试3”

这就是你需要的吗

 String s = "test:test2+test3++test4:test5++test6";
String[] s1 = s.replaceAll ("[:+]{1}", " ").split (" ");

for(int i = 0;i<s1.length;i++){
    System.out.println (s1[i]);
}

这应该适合您:

String string = "test:test2+test3++test4:test5+test6";
string.replaceAll("([:+]){2,}", "$1 $1").split("[:+]")
输出:

 test
 test2
 test3

 test4
 test5

 test6
  • 试验
  • 测试2
  • 测试3
  • “”
  • 测试4
  • 测试5
  • 测试6

  • 请参阅带有空格的标记#4(我添加了引号以演示)。

    你好,阿达斯,首先感谢您的回答。您描述的输出与StringUtils.split(“[:+]”)的输出相同,但实际上我需要在test3和test4之间的数组中使用空格。我将更新我的问题与想要的输出,以澄清它!美好的我还将尝试您的解决方案,因为我可以想象这两种方法在性能上有所不同。谢谢嘿,Adarsh,我的问题中没有提到这个例子,但是:如果++出现在字符串的末尾,我还需要一个空格。现在只有来自anubhava的方法在这种情况下返回空白。我想我应该添加这个信息。太好了,非常感谢!这正是我想要的你能解释一下为什么replaceAll方法是必要的吗(因为我不是regexp专家,它实际上在做什么)?会帮上大忙的!;)当然可以
    replaceAll
    正在查找两个或多个
    +或:
    并在它们之间插入空格,请参见
    $1$1
    ,其中
    $1
    为匹配组#1。rest是一个简单的拆分操作。遗憾的是,我忽略了:StringUtils.splitPreserveAllTokens也是我问题的解决方案。后期注意:如果使用以下参数
    someString.split(\\\+”,-1)