web-dev-qa-db-fra.com

Supprimer le préfixe de la chaîne dans Groovy

Je dois supprimer le préfixe de String in Groovy si c'est vraiment le début.

Si le préfixe est groovy:

  • pour groovyVersion je m'attends Version
  • pour groovy j'attends une chaîne vide
  • pour spock 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?

6
Michal Kordas

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)
12
ccheneson

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")
4
Michael Easter

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'
2
tim_yates

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
}
2
Fels

vous devriez utiliser une expression rationnelle:

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