Groovyでは " と ' の両方を文字列に使います。どちらを使うこともできます。どちらのタイプの文字列でも使えるので、クォート文字を含む文字列の扱いが容易になっています。
Groovyのパーサは\uab12表記(先頭にバックスラッシュ、続く'u'の後ろにきっかり4文字の16進数)をサポートしています。Javaのパーサと同じく、この表記は文字列やプログラムの中のあらゆるところで使うことができます。
文字列は "+" で連結することができます。例:
Groovyでは通常の文字列は複数行にまたがることはできません。
このルールの例外として、行末にバックスラッシュを置くとその行と次の行を結合できます(バックスラッシュ自体は消滅します)。
テキストブロックを使いたいがその中身を一切エンコードしたくない場合(例えばHTMLブロックのようなとき)、"""構文を使うことができます。
バックスラッシュで始まっているので、上の文字列 text にはちょうど二つの改行が含まれます。ホストシステムの慣習によらず、改行は常に '\n' 文字で表現されます。
特殊文字をエスケープするための余分なバックスラッシュが不要になる、文字列リテラルの別の記法も用意されています。これは特に正規表現に便利です。
詳しい情報については、Regular Expressions を読んで下さい。
以下の二つのサンプルコードで試すことができます(groovyConsoleにカット&ペーストしてみてください):
上の二つの変数は同じマップを参照します。
Stringで同じことをすると、振る舞いは異なります:
Guillaume Laforgeはこう説明しています:
最初の例では、snとstはメモリ上の全く同一のマップオブジェクトを指しています。二番目のコードでは、stは最後にはメモリ上の別の場所にできた別の「不変」文字列を指しているのです。
文字列はクォート(シングル/ダブル、複数行の場合は三つのダブルクォート)で囲んで定義し、その中にはすでに示したようにJSP ELやVelocity、Jexl等と似た ${式} 構文を使って任意の式を含めることができます。メソッド呼び出しなどを含む、あらゆる有効なGroovyの式を ${...} の中に置くことができます。GStringは、Javaで通常のStringが生成されるのと同様の方法で定義されます。
実際に何か起こるかというと、${...} 式を含む文字列式ではどこでも、通常のjava.lang.StringインスタンスではなくGStringオブジェクトが生成され、これがそのテキストとString内で使われる値を格納します。GStringは遅延評価を使うので、toString()メソッドが呼び出されるまではそのGStringが評価されることはありません。
遅延評価は、文字列の演算やその値へのtoString()の呼び出し、異なる文字列の連結などがある場合にその実行を必要な時点まで遅らせることができるので、ロギングのような処理に便利です。
GStringのもう一つの使用例はGSQLです。
上述のメカニズムを利用してSQL文にパラメータを渡すことができるので、SQLのような別の言語とGroovyをうまく統合することができます。GroovySqlは式を ? に変換し、JDBC PreparedStatement を使用して、型を維持しながら値をその中に渡します。
GStringからStringへ明示的に変換したければ、toString()メソッドを使うことができます。Groovyが自動的にGStringをStringに変換してくれることも可能です。
JN1525-Strings 参照。