Groovyは、通常の代わりにStringBuilder/StringBufferを作成するためのリテラル構文をサポートしています
def sb = new StringBuilder()
しかし、正しい構文を思い出せない(またはGoogleで見つけられない)ようです。
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は明示的にのみ作成できます。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