Groovy GDK等效于Apache Commons stringutils.capitalize(STR)或Perl的Ucfirst(str)

StackOverflow https://stackoverflow.com/questions/681807

  •  22-08-2019
  •  | 
  •  

是/否问题:是否有GROOVY GDK功能来利用字符串的第一个字符?

我正在寻找相当于Perl的Ucfirst(..)或Apache Commons stringutils.capitalize(str)的时髦的(后者都大写了输入字符串中所有单词的第一个字母)。

我目前正在用手动编码此。

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

..哪个有效,但我认为有一种更加令人讨厌的方法可以做到这一点。我想象ucfirst(..)是比说中心(..)更普遍的操作,这是Groovy GDK中的标准方法(请参阅 http://groovy.codehaus.org/groovy-jdk/java/lang/string.html).

有帮助吗?

解决方案

不,没有直接构建在语言中。

尽管您不想像弗拉基米尔(Vladimir)所建议的那样使用java惯用方式,但还有几种更加令人讨厌的方法来完成您的要求(如果您不想使用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()

其他提示

我不知道有任何这样的方法,但是解决方法是直接在您的Groovy代码中使用Apache Commons库:

import org.apache.commons.lang.StringUtils

def str = StringUtils.capitalize(input)

它使您的时髦代码有点java-ish(有些可能不喜欢它),但可以完成工作。

IMO Groovy的最大优势是,您可以轻松地利用通常使用更传统的Java代码库的所有Java库。

要在您的应用中全球可用,只需在启动时初始化此块

string.metaclass.capitalize = {degegate [0] .touppercase()+委托[1 ..- 1]}

如果您想更进一步并大写每个单词,则可以使用类似的东西:

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(' ')

好吧,您可以尝试一下:

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

也许就是这样:

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

截至Groovy 1.8.2(早在2011年9月发布), capitalize() 是内置的增强 CharSequence 哪个 String 工具。

def str = "hello world"
str = str.capitalize()
assert "Hello world" == str
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top