21

Groovyは、通常の代わりにStringBuilder/StringBufferを作成するためのリテラル構文をサポートしています

def sb = new StringBuilder()

しかし、正しい構文を思い出せない(またはGoogleで見つけられない)ようです。

4

4 に答える 4

26

単一のステップでStringBufferを取得するには、次を使用できます。

def sb = 'Hello'<<''

あるいは:

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

最初は空でした。

StringBuilderではなくStringBufferを使用する理由は、Java 1.4との互換性を維持するためだと思います(ただし、間違っている可能性があります)。

于 2009-11-25T16:14:01.737 に答える
16

StringBufferを作成するには:

text = 'Hello '

追加するには:

text <<= 'World!'

そして、これはもう少し役立つかもしれません。

于 2009-11-25T15:04:43.547 に答える
14

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は同期されません。詳細については、このリンクを確認してください。

于 2014-05-11T15:09:59.583 に答える
1

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
于 2019-03-11T17:19:34.293 に答える