2009-03-25 12 views
8

Sí/no pregunta: ¿Hay una función Groovy GDK para capitalizar el primer carácter de una cadena?Groovy equivalente GDK de Apache Commons StringUtils.capitalize (str) o Perl's ucfirst (str)

Estoy buscando un equivalente Groovy de Perl's ucfirst (..) o Apache Commons StringUtils.capitalize (str) (este último escribe en mayúscula la primera letra de todas las palabras en la cadena de entrada).

estoy actualmente codificar esta a mano utilizando ..

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

.. que funciona, pero supongo que hay una manera más maravillosa de hacerlo. Imagino que ucfirst (..) es una operación más común que decir center (..) que es un método estándar en Groovy GDK (ver http://groovy.codehaus.org/groovy-jdk/java/lang/String.html).

Respuesta

21

No, nada incorporado directamente en el idioma.

Hay un par de formas más geniales de hacer lo que estás preguntando (si no quieres usar StringUtils en la forma idiomática de Java como sugiere Vladimir).

Se puede simplificar el método que usa un valor negativo en la segunda mitad de su rango:

def str = "foo" 

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

O puede utilizar una importación estática para que se vea como un método nativo:

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

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

también puede modificar el MetaClass tener todos los métodos StringUtils derecho sobre él, por lo que se ve como un método GDK:

import org.apache.commons.lang.StringUtils 

String.metaClass.mixin StringUtils 

assert "Foo" == "foo".capitalize() 
+1

+1 para String.metaClass.mixin. No sabía acerca de eso –

+0

Usuarios de Grails tengan cuidado si estás haciendo mixin en Bootstrap podría causarte dolor, mira: http://stackoverflow.com/questions/10843070/gsp-rendering-issue-after-server-is -juguete/noche – Steve

6

No estoy al tanto de cualquier método, pero una solución es utilizar directamente la biblioteca Apache Commons en el código Groovy:

import org.apache.commons.lang.StringUtils 

def str = StringUtils.capitalize(input) 

hace el código Groovy un poco de Java-ish (algunos pueden no me gusta) pero hace el trabajo.

IMO la gran ventaja de Groovy es que puede aprovechar fácilmente todas las bibliotecas de Java que normalmente utiliza con una base de código Java más tradicional.

0

para que esté disponible a nivel mundial en su aplicación, simplemente inicializar este bloque en el arranque

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

0

Si quería ir un paso más allá y capitalizar cada palabra, se puede usar algo como esto:

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

bien puede probar esto:

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

o puede ser esta:

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

0

Como de Groovy 1.8.2 (publicado en septiembre de 2011), capitalize() es una mejora incorporada a CharSequence que implementa String.

def str = "hello world" 
str = str.capitalize() 
assert "Hello world" == str 
Cuestiones relacionadas