文字列を開始する場合は、Groovyで文字列からプレフィックスを削除する必要があります(それ以外の場合はアクションはありません)。
接頭辞がgroovy
の場合:
groovyVersion
の場合はVersion
を期待しますgroovy
には空の文字列が必要ですspock
の場合はspock
を期待します今は.minus()
を使用していますが、使用すると
'library-groovy' - 'groovy'
その結果、私はlibrary-
の代わりに library-groovy
。
私が望むものを達成するためのグルーヴィーな方法は何ですか?
私はGroovyについてはあまり知りませんが、これは私の考えです。
def reg = ~/^groovy/ //Match 'groovy' if it is at the beginning of the String
String str = 'library-groovy' - reg
println(str)
このバージョンは単純でシンプルですが、要件を満たし、元のバージョンへの段階的な変更です。
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")
これは大文字と小文字が区別され、正規表現を使用しません。
def prefix = 'Groovy';
def string = 'Groovy1234';
def result = '';
if (string.startsWith(prefix)) {
result = string.substring(prefix.size())
print result
}
あなたはこれを行うことができますが、私はそれがあなたの要件のすべてをキャッチすることを疑います(あなたがここで指定していない他のものを持っていると思うので)
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
}
これを文字列のmetaClassに追加できます
String.metaClass.stripGroovy = { -> delegate.replaceAll(/\W?groovy\W?/, '') }
次に行います:
assert 'library-groovy'.stripGroovy() == 'library'
あなたは正規表現を使うべきです:
assert 'Version spock' == 'groovyVersion groovy spock'.replaceAll( /\bgroovy/, '' )