groovy:拆分字符串但包含分隔符

时间:2018-01-23 22:10:46

标签: string groovy

我想分割一个关于分隔符的字符串,但我希望分隔符包含在输出中。例如:

> String s = "helloXthereXmyXfriend"
> s.split("X")
["hello","Xthere","Xmy","Xfriend"]

有没有一种方法可以做到这一点,还是我需要自己编写?

3 个答案:

答案 0 :(得分:0)

这是一种有效的方法

String[] split(String s, String regex) {
    String[] split = s.split(regex);
    String[] out = Arrays.stream(split)
        .map(x -> regex + x)
        .toArray(String[]::new);
    out[0] = split[0];
    return out;
}

答案 1 :(得分:0)

我不知道这样做的方法,但您可以使用元编程来添加自己的方法:

String.metaClass.splitInclude { delimiter ->
    def tokens = delegate.split(delimiter) as List
    def result = tokens.withIndex().collect { item, index ->
                    (index) ? "${delimiter}${item}" : item 
                 } 
}

def s = "helloXthereXmyXfriend"
def result = s.splitInclude('X')
assert ["hello","Xthere","Xmy","Xfriend"] == result

答案 2 :(得分:0)

不需要Groovy代码进行后处理。正则表达式有足够的力量 独自完成任务。试试这个正则表达式:

.+?(?=X|$)

工作原理:

  • .+? - 尽可能少地匹配非空字符序列。
  • (?=X|$) - 正面查找:在您刚刚匹配之后 X(您的模式)或字符串的结尾。

在Groovy中,任务现在不是拆分源字符串, 但找到所有比赛。

试试这段代码:

String s = "helloXthereXmyXfriend"
def tbl = s.findAll('.+?(?=X|$)')
print tbl

请注意,我将正则表达式的双引号更改为单引号, 防止变量插值。

打印:

[hello, Xthere, Xmy, Xfriend]