2016-08-23 14 views
4

GroovyのStringから接頭辞を削除する必要があります。Groovyの文字列からプレフィックスを削除する

プレフィックスがgroovyの場合:

  • groovyVersionのために、私はgroovyためVersion
  • を期待し、私は私がspock

は、今私が.minus()を使用期待spockに空の文字列

  • を期待していますが、私がするとき

    'library-groovy' - 'groovy' 
    

    この結果、library-groovyの代わりにlibrary-が得られます。

    私が欲しいものを達成するためのグルーヴィーな方法は何ですか?私はGroovyのについて多くを知らないが、ここでは、この1の私の感想です

    assert 'Version spock' == 'groovyVersion groovy spock'.replaceAll(/\bgroovy/, '') 
    
  • 答えて

    5

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

    あなたは正規表現を使用する必要があります(あなたがここに指定していない他のものがあると思いますが)

    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 
    } 
    

    これを追加できます文字列の電子メタクラス

    String.metaClass.stripGroovy = { -> delegate.replaceAll(/\W?groovy\W?/, '') } 
    

    は、その後の操作を行います。

    assert 'library-groovy'.stripGroovy() == 'library' 
    
    2

    あなたがこれを行うことができますが、私はそれがすべてキャッチ疑い

    +0

    はうまく動作します。しかし、私は正規表現なしでシンプルで読みやすい何かを探していました –

    +0

    これをメソッドにラップしますか?それをStringのmetaClassに追加しますか? –

    +0

    確かに、それはオプションになりますが、私はそれを短く簡単なスクリプトで必要とします。メソッドを追加するのはスクリプトそのものよりも時間がかかります:) –

    1

    これは大文字と小文字が区別され、正規表現を使用していません:

    ​def prefix = 'Groovy'; 
    def string = 'Groovy1234'; 
    def result = ''; 
    
    if (string.startsWith(prefix)) { 
        result = string.substring(prefix.size()) 
        print result 
    } 
    
    3

    このバージョンでは、無地でシンプルですが、それ要件を満たし、元のものへの段階的な変更です:

    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") 
    
    関連する問題