2009-11-25 15 views
15

Groovy soporta una sintaxis literal para la creación de un StringBuilder/StringBuffer en lugar del habitualStringBuilder literal Groovy/StringBuffer

def sb = new StringBuilder() 

Sin embargo, parece que no puedo recordar (o encontrar en Google) la sintaxis correcta.

+0

'sb.append (" text ")' concatenará sus cadenas – IgniteCoders

Respuesta

17

Para obtener un StringBuffer en un solo paso, se puede usar

def sb = 'Hello'<<'' 

o incluso:

def sb = ''<<'' //4 single quotes, not double quotes 

para uno inicialmente vacío.

Creo (pero podría estar equivocado) que la razón para usar un StringBuffer en lugar de un StringBuilder es mantener la compatibilidad con Java 1.4.

+0

También usaría un 'StringBuffer' en las versiones actuales de Java si necesita concatenar cadenas de manera segura –

13

Para crear un StringBuilder

text = 'Hello ' 

Para anexar

text <<= 'World!' 

And this might help some more.

+0

Parece que ese texto se convierte de String a StringBuilder solo cuando se usa el operador '<< =', ¿correcto? Además, en realidad es un StringBuffer no un StringBuilder –

+0

Sí, de hecho, mi ejemplo podría ser demasiado simplista. Necesita convertir y reasignar a StringBuffer, como tal, el operador '<< ='. Más tarde puedes usar '<<'. También tienes razón sobre el 'StringBuffer', que es la forma en que permitieron el reemplazo del personaje in situ utilizando el operador' [] '. – omerkudat

8

Acabo de jugar con StringBuilder/StringBuffer en Groovy.

Algunos ejemplos siguientes:

// << operator example 
def year = StringBuilder.newInstance() 
year << 2 
year << "0" 
year << '1' << 4 
assert year.toString() == "2014" 

// You can use with operator 
def month = StringBuilder.newInstance() 
month.with { 
    append "0" 
    append '5' 
} 
assert month.toString() == "05" 

// or just append String like in Java or you can leave parenthesis 
def day = StringBuilder.newInstance() 
day.append "1" 
day.append('1') 
assert day.toString() == '11' 

// It's nice to know, that we can use StringBuilder directly in GString 
def date = "$year-${month}-$day" 
assert date == "2014-05-11" 

Nota: Uso StringBuilder cuando es utilizado sólo por un hilo. StringBuilder proporciona una API compatible con StringBuffer. StringBuffer está sincronizado, StringBuilder no. Compruebe esto link para más información.