Groovy GDK等效于Apache Commons stringutils.capitalize(STR)或Perl的Ucfirst(str)
题
是/否问题:是否有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