Introducción

Las cadenas de comillas simples son objetos String. Las cadenas de comillas simples no se expanden. Las variables de la clase String son inmutables.

generaciondecodigos@nereida:~/src/groovy/strings$ cat -n literals.groovy 
     1  str = 'hello'
     2  println str[2]
     3  
     4  try {
     5    str[4] = '!'
     6  }
     7  catch (Exception ex) {
     8    println ex
     9  }generaciondecodigos@nereida:~/src/groovy/strings$ groovy literals.groovy 
l
groovy.lang.MissingMethodException: No signature of method:
java.lang.String.putAt() is applicable for argument types:
(java.lang.Integer, java.lang.String) values: [4, !]

Siguen algunos ejemplos tomados de http://pleac.sourceforge.net/pleac_groovy/strings.html. Las cadenas de comillas dobles pertencence a la clase GString (Véase la entrada de la wikipedia para gstring) y permiten interpolar expresiones. Es posible obtener una cadena que abarca múltiples líneas repitiendo el delimitador tres veces:

//----------------------------------------------------------------------------------
string = '\\n'                    // two characters, \ and an n
assert string.size() == 2
string = "\n"                     // a "newline" character
string = '\n'                     // a "newline" character

string = "Jon 'Maddog' Orwant"    // literal single quote inside double quotes
string = 'Jon \'Maddog\' Orwant'  // escaped single quotes

string = 'Jon "Maddog" Orwant'    // literal double quotes inside single quotes
string = "Jon \"Maddog\" Orwant"  // escaped double quotes

string = '''
This is a multiline string declaration
using single quotes (you can use double quotes)
'''
//----------------------------------------------------------------------------------

Los 'documentos aqui' interpolables (véase la entrada Here document de la Wikipedia) - que es como se denominan a las cadenas multilínea - pueden ser muy útiles para crear templates:

generaciondecodigos@nereida:~/src/groovy/strings$ cat -n CreateXML.groovy 
     1  #!/usr/bin/env groovy
     2  
     3  def xmllang(language, author) {
     4    fragment = """
     5    <language name = "${language}">
     6      <author>${author}</author>
     7    </language>
     8  """
     9  }
    10  langs = [ 'C++': 'Stroustrup', 'Java' : 'Gosling', 'Lisp' : 'McCarthy' ]
    11  content = '<languages>'
    12  langs.each{language, author ->
    13    content += xmllang(language, author)
    14  }
    15  content += '</languages>'
    16  println  content
generaciondecodigos@nereida:~/src/groovy/strings$ ./CreateXML.groovy 
<languages>
  <language name = "C++">
    <author>Stroustrup</author>
  </language>

  <language name = "Java">
    <author>Gosling</author>
  </language>

  <language name = "Lisp">
    <author>McCarthy</author>
  </language>
</languages>
generaciondecodigos@nereida:~/src/groovy/strings$

Si una línea termina en escape se une a la siguiente:

generaciondecodigos@nereida:~/src/groovy/strings$ cat -n ./MultilineStringsEscape.groovy
     1  #!/usr/bin/env groovy
     2  def name = "James"
     3
     4  def text = """\
     5  hello there ${name} \
     6  how are you today?
     7  """
     8
     9  println(text)
generaciondecodigos@nereida:~/src/groovy/strings$ ./MultilineStringsEscape.groovy
hello there James how are you today?

Casiano Rodríguez León
2010-04-30