Перейти к основному содержимому

Как удалить префикс из строк в Groovy

· 4 мин. чтения

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 ForEach")
def expected = "Tutorials at ForEach"
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 ForEach"
def actual
if(trimPrefix.startsWithIgnoreCase(prefix)) {
actual = trimPrefix.substring(prefix.length())
}

def expected = "Tutorials at ForEach"

assertEquals(expected, actual)
}

2.3. Метод startWithAny()

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

Метод opensWithAny() проверяет, начинается ли CharSequence с какими-либо указанными префиксами. Как только префикс будет подтвержден, мы можем применить логику в соответствии с требованиями:

String trimPrefix = "Groovy-Tutorials at ForEach"
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 ForEach"
String actual = trimPrefix - regex

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

Нечувствительная к регистру версия приведенного выше регулярного выражения:

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

Оператор вставки ^ гарантирует, что указанная подстрока существует в начале.

3.1. метод replaceFirst()

Используя регулярные выражения вместе с нативными строковыми методами, мы можем выполнять очень мощные трюки. Метод replaceFirst() является одним из таких методов. Он заменяет первое вхождение, совпадающее с данным регулярным выражением.

Удалим префикс с помощью метода replaceFirst() :

@Test
public void whenPrefixIsRemovedUsingReplaceFirst_thenReturnTrue() {

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

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

3.2. метод replaceAll()

Как и replaceFirst() , replaceAll() также принимает регулярное выражение и указанную замену. Он заменяет каждую подстроку, соответствующую заданным критериям . Чтобы удалить префикс, мы также можем использовать этот метод.

Давайте используем replaceAll() для замены подстроки только в начале строки:

@Test
public void whenPrefixIsRemovedUsingReplaceAll_thenReturnTrue() {

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

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

4. Вывод

В этом кратком руководстве мы рассмотрели несколько способов удаления префиксов из строки. Чтобы подтвердить существование префикса, мы увидели, как это сделать для строк как в верхнем, так и в нижнем регистре.

В то же время мы увидели, как обнаружить префикс среди множества предоставленных подстрок. Мы также рассмотрели несколько методов, которые можно использовать для удаления подстроки. Наконец, мы кратко обсудили роль регулярных выражений для этой цели.

Как всегда, все примеры кода можно найти на GitHub .