在Groovy中从字符串中删除前缀

19

如果字符串以指定的前缀开头,我需要在Groovy中删除该前缀(否则不进行任何操作)。

如果前缀是groovy

  • groovyVersion的预期结果为Version
  • groovy的预期结果为空字符串
  • spock的预期结果为spock

我目前使用的是.minus(),但当我执行以下操作时:

'library-groovy' - 'groovy'

结果是我得到library-而不是library-groovy

如何用Groovy实现我想要的效果?

5个回答

33

我对Groovy不是很了解,但以下是我的看法:

def reg = ~/^groovy/   //Match 'groovy' if it is at the beginning of the String
String str = 'library-groovy' - reg

println(str)

10

这是区分大小写的,不使用正则表达式:

def prefix = 'Groovy';
def string = 'Groovy1234';
def result = '';

if (string.startsWith(prefix)) {
    result = string.substring(prefix.size())
    print result
}

10

这个版本简单明了,但满足要求并且是对原始版本的增量更改:

def trimGroovy = { 
    it.startsWith('groovy') ? it - 'groovy' : it
}

assert "Version" == trimGroovy("groovyVersion")
assert "" == trimGroovy("groovy")
assert "spock" == trimGroovy("spock")
assert "library-groovy" == trimGroovy("library-groovy")

2
你应该使用正则表达式:
assert 'Version  spock' == 'groovyVersion groovy spock'.replaceAll( /\bgroovy/, '' )

正如方法名称所示,它将替换所有出现的内容,而不仅仅是前缀。 - Alexander Stohr

-2

解决方案:使用-运算符并截取右侧字符串。

def sentence = "remove_me_i_am_ok"
def string_to_be_remove = "remove_me_"

String result = sentence - string_to_be_remove
print("output: ${result}")​

/* output: i_am_ok */

1
如果第一次出现在序列中间,这也会剥离给定的序列。 - Alexander Stohr
@AlexanderStohr 即使字符串位于序列的开头/中间/结尾,它也应该能正常工作,已经测试过了。 - avivamg
2
根据我的理解,前缀应该位于字符串的开头 - 这就是这个词的含义告诉我的。 - Alexander Stohr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接