0

我想在一行中将每个单词的第一个字符设为大写,将剩余字符设为小写。以下代码打印与原始字符串相同。怎样才能使它起作用?

def name = "hello world grails"

        println  name.split(" +").each{
             it[0]?.toUpperCase()+it[1..-1]?.toLowerCase()
        }
4

3 回答 3

1

这将完成您的工作:

 ​def name = "hello world grails"

 def newName = ""
 name.split(" ").each { word ->
    newName += word[0].toUpperCase() + word[1..(word.size()-1)].toLowerCase()+" "
 }

 println newName​
于 2013-05-27T16:22:31.603 回答
1

您可以使用capitalize()在 1.7.3 版本中添加到 Groovy 的方法:

def name = "hello world grails"
def splitted = name.split("\\s+").collect { it.toLowerCase().capitalize() }
println splitted

如果你想有一个字符串:

println splitted.inject('') { accumulator, current -> accumulator + current + ' ' }.trim()

你的代码也有问题。使用.each {...}不会“转换”结果列表中的元素,例如

def list = ["Asdf", "XCVB"]
def ret = list.each { return it.toLowerCase() }
println ret == list // true
ret = list.collect { return it.toLowerCase() }
println ret == list // false
于 2013-05-27T16:23:56.057 回答
1

使用以下代码:

def requiredString = org.apache.commons.lang.WordUtils.capitalizeFully('i AM gRooT') // yields 'I Am Groot'

您需要包含 Apache Commons Lang 作为依赖项。

于 2017-08-29T06:36:45.920 回答