Groovyは、通常の代わりにStringBuilder/StringBufferを作成するためのリテラル構文をサポートしています
def sb = new StringBuilder()
しかし、正しい構文を覚えていない(またはGoogleで見つけていない)ようです。
単一のステップでStringBufferを取得するには、次を使用できます。
def sb = 'Hello'<<''
あるいは:
def sb = ''<<'' //4 single quotes, not double quotes
最初は空でした。
StringBuilderではなくStringBufferを使用する理由は、Java 1.4との互換性を維持するためです)と思います(ただし、間違っている可能性があります)。
GroovyでStringBuilder/StringBufferを使って遊んだところです。
以下のいくつかの例:
// << 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"
注:1つのスレッドでのみ使用される場合は、StringBuilderを使用します。 StringBuilderは、StringBufferと互換性のあるAPIを提供します。 StringBufferは同期されますが、StringBuilderは同期されません。詳細については、これを確認してください リンク 。
String.leftShift()
StringBufferを作成します 。
AFAICS、Groovyシンタックスシュガーを介してStringBuilderを作成することはできません。 StringBuilderは明示的にのみ作成できます。 String または GString で演算子のオーバーロードがない場合、明示的に使用できるStringBuilderが作成されます。 Java文字列の連結 StringBuilderを作成する可能性があります が、そのインスタンスはコードで使用できません。
この回答を書いている時点で:
<<=
を使用すると言われています。 <<=
は、<<
を使用する Java複合代入 にすぎません。特に、 オーバーロード<<=
のメソッドはありません。''<<'' //4 single quotes, not double quotes
を使用すると言われました。少なくとも現代のグルーヴィーでは、二重引用符は問題なく機能します。次のコードは、<<
vs <<=
および""
vs ''
のさまざまな組み合わせの結果に対して、StringBuilderではなくStringBufferを常に取得することを示しています。
def ls = ''<<''
println ls.class
def lse = ''
lse <<=''
println lse.class
ls = ""<<''
println ls.class
lse = ""
lse <<=''
println lse.class
ls = ''<<""
println ls.class
lse = ''
lse <<=""
println lse.class
ls = ""<<""
println ls.class
lse = ""
lse <<=""
println lse.class
プリント:
class Java.lang.StringBuffer
class Java.lang.StringBuffer
class Java.lang.StringBuffer
class Java.lang.StringBuffer
class Java.lang.StringBuffer
class Java.lang.StringBuffer
class Java.lang.StringBuffer
class Java.lang.StringBuffer