Groovy GDK equivalent of Apache Commons StringUtils.capitalize(str) or Perl's ucfirst(str)
Asked Answered
B

6

9

Yes/no-question: Is there a Groovy GDK function to capitalize the first character of a string?

I'm looking for a Groovy equivalent of Perl's ucfirst(..) or Apache Commons StringUtils.capitalize(str) (the latter capitalizes the first letter of all words in the input string).

I'm currently coding this by hand using ..

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

.. which works, but I assume there is a more Groovy way to do it. I'd imagine ucfirst(..) being a more common operation than say center(..) which is a standard method in the Groovy GDK (see http://groovy.codehaus.org/groovy-jdk/java/lang/String.html).

Barrada answered 25/3, 2009 at 14:24 Comment(0)
A
22

No, nothing built directly into the language.

There are a couple of more groovy ways to do what you're asking though (if you don't want to use StringUtils in the Java idiomatic way as Vladimir suggests).

You can simplify your method using a negative value in the second half of your range:

def str = "foo"

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

Or you can use an import static to make it look like a native method:

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

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

You can also modify the metaClass to have all of StringUtils methods right on it, so it looks like a GDK method:

import org.apache.commons.lang.StringUtils

String.metaClass.mixin StringUtils

assert "Foo" == "foo".capitalize()
Afterburner answered 26/3, 2009 at 0:46 Comment(1)
Grails users beware if you are doing the mixin in Bootstrap it could cause you grief, see: #10843570Committeewoman
P
6

I'm not aware of any such method, but a workaround is to directly use the Apache Commons library in your Groovy code:

import org.apache.commons.lang.StringUtils

def str = StringUtils.capitalize(input)

It makes your Groovy code a bit Java-ish (some may not like it) but it does the job.

IMO the great advantage of Groovy is that you can very easily leverage all the Java libraries you normally use with a more traditional Java code base.

Pronuba answered 25/3, 2009 at 14:33 Comment(0)
H
0

To make it available globally in your app ,just initialise this block at start up

String.metaClass.capitalize = { delegate[0].toUpperCase()+delegate[1..-1] }

Higher answered 15/1, 2011 at 6:49 Comment(0)
H
0

If you wanted to take it a step further and capitalize each word, you can use something like this:

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(' ')
Hepburn answered 20/4, 2012 at 16:6 Comment(0)
G
0

well you can try this:

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

or may be this:

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

Gadid answered 14/7, 2015 at 19:18 Comment(0)
B
0

As of Groovy 1.8.2 (released way back in September 2011), capitalize() is a built-in enhancement to CharSequence which String implements.

def str = "hello world"
str = str.capitalize()
assert "Hello world" == str
Baeyer answered 14/7, 2015 at 19:48 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.