Je dois supprimer le préfixe de String in Groovy si c'est vraiment le début.
Si le préfixe est groovy
:
groovyVersion
je m'attends Version
groovy
j'attends une chaîne videspock
je m'attends spock
En ce moment, j'utilise .minus()
, mais quand je le fais
'library-groovy' - 'groovy'
alors, je reçois library-
au lieu de library-groovy
.
Quelle est la meilleure façon de réaliser ce que je veux?
Je ne connais pas grand chose à propos de Groovy, mais voici mon point de vue sur celui-ci:
def reg = ~/^groovy/ //Match 'groovy' if it is at the beginning of the String
String str = 'library-groovy' - reg
println(str)
Cette version est simple et claire, mais elle répond aux exigences et constitue une modification incrémentielle de votre version originale:
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")
Vous pouvez le faire, mais je doute que cela réponde à toutes vos exigences (car je suppose que vous en avez d’autres que vous n’avez pas spécifiées ici).
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
}
Vous pouvez ajouter ceci à la métaClasse de String
String.metaClass.stripGroovy = { -> delegate.replaceAll(/\W?groovy\W?/, '') }
alors fais:
assert 'library-groovy'.stripGroovy() == 'library'
Ceci est sensible à la casse et n'utilise pas d'expression régulière:
def prefix = 'Groovy';
def string = 'Groovy1234';
def result = '';
if (string.startsWith(prefix)) {
result = string.substring(prefix.size())
print result
}
vous devriez utiliser une expression rationnelle:
assert 'Version spock' == 'groovyVersion groovy spock'.replaceAll( /\bgroovy/, '' )