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

时间:2016-08-23 11:43:22

标签: string groovy substring prefix

如果它确实在开头,我需要在Groovy中从String中删除前缀。

如果前缀为groovy

  • for groovyVersion我期待Version
  • for groovy我希望空字符串
  • for spock我期待spock

现在我使用.minus(),但是当我做

'library-groovy' - 'groovy'

然后我得到library-而不是library-groovy

实现我想要的是什么样的常规方式?

6 个答案:

答案 0 :(得分:16)

我对Groovy不太了解,但这是我对此的看法:

my_program

答案 1 :(得分:4)

此版本简单明了,但它符合要求,并且是对原始版本的增量更改:

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 :(得分:3)

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

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

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

答案 3 :(得分:2)

你可以这样做,但我怀疑它能满足你的所有要求(因为我猜你还有其他你未在此处指明的要求)

def tests = [
    [input:'groovyVersion',  expected:'Version'],
    [input:'groovy',         expected:''],
    [input:'spock',          expected:'spock'],
    [input:'library-groovy', expected:'library'],
    [input:'a-groovy-b',     expected:'ab'],
    [input:'groovy-library', expected:'library']
]

tests.each {
    assert it.input.replaceAll(/\W?groovy\W?/, '') == it.expected
}

您可以将其添加到String的metaClass

String.metaClass.stripGroovy = { -> delegate.replaceAll(/\W?groovy\W?/, '') }

然后做:

assert 'library-groovy'.stripGroovy() == 'library'

答案 4 :(得分:1)

你应该使用正则表达式:

current version is 1.0

答案 5 :(得分:-1)

解决方案:使用 - 运算符并剪切正确的字符串。

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 */