Reputation: 10925
I need to remove prefix from String in Groovy if it begins the string (no action otherwise).
If prefix is groovy
:
groovyVersion
I expect Version
groovy
I expect empty stringspock
I expect spock
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
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
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
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
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
Reputation: 20699
you should use a regexp:
assert 'Version spock' == 'groovyVersion groovy spock'.replaceAll( /\bgroovy/, '' )
Upvotes: 2