Michal Kordas
Michal Kordas

Reputation: 10925

Remove prefix from string in Groovy

I need to remove prefix from String in Groovy if it begins the string (no action otherwise).

If prefix is groovy:

Right now I use .minus(), but when I do

'library-groovy' - 'groovy'

then as a result I get library- instead of library-groovy.

What's the groovy way to achieve what I want?

Upvotes: 20

Views: 43997

Answers (5)

Aviv
Aviv

Reputation: 14467

Solution: use - opreator and cut the right string.

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

Upvotes: -2

Michael Easter
Michael Easter

Reputation: 24468

This version is plain and simple, but it meets the requirements and is an incremental change to your original:

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")

Upvotes: 10

Fels
Fels

Reputation: 1343

This is case sensitive and doesn't use a regular expression:

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

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

Upvotes: 10

ccheneson
ccheneson

Reputation: 49410

I dont know much about Groovy but here is my take on this one:

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

println(str)

Upvotes: 34

injecteer
injecteer

Reputation: 20699

you should use a regexp:

assert 'Version  spock' == 'groovyVersion groovy spock'.replaceAll( /\bgroovy/, '' )

Upvotes: 2

Related Questions