Groovy GDK-эквивалент Apache Commons StringUtils.capitalize (str) или расширенный Perl (str) - PullRequest
8 голосов
/ 25 марта 2009

Да / нет-вопрос: Существует ли функция Groovy GDK, чтобы использовать заглавные буквы первого символа строки?

Я ищу в Groovy эквивалент ucfirst (..) Perl или Apache Commons StringUtils.capitalize (str) (последний вводит первую букву всех слов во входной строке).

Я сейчас пишу это вручную, используя ..

str = str[0].toUpperCase() + str[1 .. str.size() - 1]

.., который работает, но я предполагаю, что есть более Groovy способ сделать это. Я мог бы представить, что ucfirst (..) является более распространенной операцией, чем скажем center (..), который является стандартным методом в Groovy GDK (см. http://groovy.codehaus.org/groovy-jdk/java/lang/String.html).

Ответы [ 6 ]

21 голосов
/ 26 марта 2009

Нет, ничего не встроено непосредственно в язык.

Есть пара более изящных способов сделать то, что вы просите, хотя (если вы не хотите использовать StringUtils идиоматическим способом Java, как предлагает Владимир).

Вы можете упростить свой метод, используя отрицательное значение во второй половине вашего диапазона:

def str = "foo"

assert "Foo" == str[0].toUpperCase() + str[1..-1]

Или вы можете использовать статический файл импорта, чтобы он выглядел как собственный метод:

import static org.apache.commons.lang.StringUtils.*

assert "Foo" == capitalize("foo")

Вы также можете изменить метакласс, чтобы все методы StringUtils были прямо на нем, поэтому он выглядит как метод GDK:

import org.apache.commons.lang.StringUtils

String.metaClass.mixin StringUtils

assert "Foo" == "foo".capitalize()
6 голосов
/ 25 марта 2009

Я не знаю ни одного такого метода, но обходной путь заключается в прямом использовании библиотеки Apache Commons в вашем коде Groovy:

import org.apache.commons.lang.StringUtils

def str = StringUtils.capitalize(input)

Это делает ваш Groovy-код немного в стиле Java (некоторым это может не нравиться), но это делает свою работу.

IMO большое преимущество Groovy состоит в том, что вы можете очень легко использовать все библиотеки Java, которые вы обычно используете, с более традиционной базой кода Java.

0 голосов
/ 14 июля 2015

Начиная с Groovy 1.8.2 (выпущена в сентябре 2011 г.), capitalize() - это встроенное улучшение CharSequence, которое реализует String.

def str = "hello world"
str = str.capitalize()
assert "Hello world" == str
0 голосов
/ 14 июля 2015

ну, вы можете попробовать это:

"hey this is a string".split(' ').collect{it.capitalize()}.join(' ')

или может быть таким:

char c = ' ' "hey this is a string".collect{ c = c==' '?it.capitalize():it }.join()

0 голосов
/ 20 апреля 2012

Если вы хотите сделать еще один шаг и использовать каждое слово с заглавной буквы, вы можете использовать что-то вроде этого:

def words = sentence.split(" ")
def newStr = []
words.each { w ->
    def capW = [w[0].toUpperCase()]
    if (w.length() > 1) {
        capW << w[1..-1].toLowerCase()
    }
    newStr << capW.join()
}
return newStr.join(' ')
0 голосов
/ 15 января 2011

Чтобы сделать его доступным глобально в вашем приложении, просто инициализируйте этот блок при запуске

String.metaClass.capitalize = { Делегат [0] .toUpperCase () + делегат [1 ..- 1] }

...