1. 序章

このクイックチュートリアルでは、Groovyの文字列からプレフィックスを削除する方法を学習します。

まず、Stringクラスがこの目的のために何を提供するかを見ていきます。 その後、正規表現に移り、それらを使用してプレフィックスを削除する方法を確認します。

2. Stringメソッドの使用

一般に、 Groovy は、Javaエコシステムの動的言語と見なされます。 したがって、すべてのJava Stringクラスメソッドを新しいGroovyメソッドと一緒に使用できます。 ただし、プレフィックスを削除するために、 removePrefix()のような単純なメソッドはまだありません。

Groovy文字列からのプレフィックスの削除は、最初の確認と削除の2つのステップで構成されます。 これらのステップは両方とも、文字列操作のための多くのユーティリティメソッドを提供するStringGroovyMethodsクラスを使用して実行できます。

2.1. startupsWith()メソッド

startWith()メソッドは、文字列が特定のプレフィックスで始まるかどうかをテストします。 プレフィックスが存在する場合はtrueを返し、存在しない場合はfalseを返します。

Groovyクロージャーから始めましょう。

@Test 
public void whenCasePrefixIsRemoved_thenReturnTrue(){
    def trimPrefix = {
        it.startsWith('Groovy-') ? it.minus('Groovy-') : it 
    }
    def actual = trimPrefix("Groovy-Tutorials at Baeldung")
    def expected = "Tutorials at Baeldung"
    assertEquals(expected, actual)
}

存在が確認されたら、 substring()メソッドを使用してそれを削除することもできます。

trimPrefix.substring('Groovy-'.length())

2.2. startupsWithIgnoreCase()メソッド

startWith()メソッドでは大文字と小文字が区別されます。 したがって、 toLowerCase()または toUpperCase()メソッドを適用することにより、ケースの影響を打ち消すために手動で作業する必要があります。

名前が示すように、 startupsWithIgnoreCase()は、大文字と小文字を区別せずにプレフィックスを検索します。 プレフィックスが存在する場合はtrueを返し、存在しない場合はfalseを返します。

この方法の使用方法を見てみましょう。

@Test
public void whenPrefixIsRemovedWithIgnoreCase_thenReturnTrue() {

    String prefix = "groovy-"
    String trimPrefix = "Groovy-Tutorials at Baeldung"
    def actual
    if(trimPrefix.startsWithIgnoreCase(prefix)) {
        actual = trimPrefix.substring(prefix.length())
    }

    def expected = "Tutorials at Baeldung"

    assertEquals(expected, actual)
}

2.3. startupsWithAny()メソッド

上記のソリューションは、プレフィックスを1つだけチェックする必要がある場合に役立ちます。 複数のプレフィックスをチェックする場合、Groovyは複数のプレフィックスをチェックするためのサポートも提供します。

startWithAny()メソッドは、CharSequenceが指定されたプレフィックスで開始するかどうかを確認します。 プレフィックスが確認されると、要件に応じてロジックを適用できます。

String trimPrefix = "Groovy-Tutorials at Baeldung"
if (trimPrefix.startsWithAny("Java", "Groovy", "Linux")) {
    // logic to remove prefix
}

3. 正規表現の使用

正規表現は、パターンを一致または置換するための強力な方法です。 Groovyにはパターン演算子〜があり、java.util.regex.Patternインスタンスを簡単に作成できます。

プレフィックスを削除するための単純な正規表現を定義しましょう。

@Test
public void whenPrefixIsRemovedUsingRegex_thenReturnTrue() {

    def regex = ~"^groovy-"
    String trimPrefix = "groovy-Tutorials at Baeldung"
    String actual = trimPrefix - regex

    def expected = "Tutorials at Baeldung"
    assertEquals("Tutorials at Baeldung", actual)
}

上記の正規表現の大文字と小文字を区別しないバージョン:

def regex = ~"^([Gg])roovy-"

キャレット演算子^は、指定された部分文字列が先頭に存在することを確認します。

3.1. replaceFirst()メソッド

ネイティブ文字列メソッドとともに正規表現を使用すると、非常に強力なトリックを実行できます。 replaceFirst()メソッドは、これらのメソッドの1つです。 これは、指定された正規表現に一致する最初のオカレンスを置き換えます。

replaceFirst()メソッドを使用してプレフィックスを削除しましょう。

@Test
public void whenPrefixIsRemovedUsingReplaceFirst_thenReturnTrue() {

    def regex = ~"^groovy"
    String trimPrefix = "groovyTutorials at Baeldung's groovy page"
    String actual = trimPrefix.replaceFirst(regex, "")

    def expected = "Tutorials at Baeldung's groovy page"
    assertEquals(expected, actual)
}

3.2. replaceAll()メソッド

replaceFirst()と同様に、 replaceAll()も正規表現と指定された置換を受け入れます。指定された基準に一致する各サブストリングを置換します。 プレフィックスを削除するには、この方法も使用できます。

replaceAll()を使用して、文字列の先頭でのみ部分文字列を置き換えましょう。

@Test
public void whenPrefixIsRemovedUsingReplaceAll_thenReturnTrue() {

    String trimPrefix = "groovyTutorials at Baeldung groovy"
    String actual = trimPrefix.replaceAll(/^groovy/, "")

    def expected = "Tutorials at Baeldung groovy"
    assertEquals(expected, actual)
}

4. 結論

このクイックチュートリアルでは、文字列からプレフィックスを削除するいくつかの方法を検討しました。 プレフィックスの存在を確認するために、大文字と小文字の両方の文字列に対してこれを行う方法を確認しました。

同時に、提供された多くのサブストリングの中からプレフィックスを検出する方法を見てきました。 また、部分文字列を削除するために使用できる複数のメソッドについても調べました。 最後に、この目的での正規表現の役割について簡単に説明しました。

いつものように、すべてのコード例はGitHubにあります。