«1. Введение

В этом кратком руководстве мы узнаем, как удалить префикс из строки в Groovy.

Сначала мы рассмотрим, что предлагает для этой цели класс String. После этого мы перейдем к регулярным выражениям и посмотрим, как мы можем использовать их для удаления префикса.

2. Использование строковых методов

Обычно Groovy считается динамическим языком для экосистемы Java. Таким образом, мы по-прежнему можем использовать все методы класса Java String вместе с новыми методами Groovy. Однако для удаления префикса по-прежнему отсутствует простой метод, такой как removePrefix().

Удаление префикса из строк Groovy состоит из двух шагов: сначала подтверждение, а затем удаление. Оба этих шага можно выполнить с помощью класса StringGroovyMethods, который предлагает множество служебных методов для манипуляций со строками.

2.1. Метод startWith()

Метод startWith() проверяет, начинается ли строка с определенного префикса. Он возвращает true, если префикс существует, и false в противном случае.

Давайте начнем с заводного замыкания:

@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. Метод startWithIgnoreCase()

Метод startWith() чувствителен к регистру. Таким образом, требуется ручное усилие, чтобы свести на нет влияние регистра, применяя методы toLowerCase() или toUpperCase().

Как следует из названия, startWithIgnoreCase() ищет префикс без учета регистра. Он возвращает 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. Метод startWithAny()

Приведенные выше решения полезны, когда нам нужно проверить только один префикс. Когда дело доходит до проверки нескольких префиксов, Groovy также поддерживает проверку нескольких префиксов.

Метод opensWithAny() проверяет, начинается ли 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() является одним из таких методов. Он заменяет первое вхождение, совпадающее с данным регулярным выражением.

Удалим префикс методом 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.