Groovy文字StringBuilder/StringBuffer

Dón*_*nal 19 groovy stringbuilder

Groovy支持用于创建StringBuilder/StringBuffer的文字语法,而不是通常的

def sb = new StringBuilder()
Run Code Online (Sandbox Code Playgroud)

但是,我似乎无法记住(或在Google上找到)正确的语法.

mat*_*att 22

要在一个步骤中获得StringBuffer,您可以使用

def sb = 'Hello'<<''
Run Code Online (Sandbox Code Playgroud)

甚至:

def sb = ''<<'' //4 single quotes, not double quotes
Run Code Online (Sandbox Code Playgroud)

对于最初空的.

我认为(但我可能错了)使用StringBuffer而不是StringBuilder的原因是为了保持与Java 1.4的兼容性.


ome*_*dat 16

创建StringBuilder

text = 'Hello '
Run Code Online (Sandbox Code Playgroud)

追加

text <<= 'World!'
Run Code Online (Sandbox Code Playgroud)

这可能会有所帮助.

  • 似乎只有在使用'<< ='运算符时,该文本才从String转换为StringBuilder,对吗?此外,它实际上是一个StringBuffer而不是StringBuilder (2认同)

Mic*_*d a 11

我刚刚在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"
Run Code Online (Sandbox Code Playgroud)

注意: 仅在一个线程使用时使用StringBuilder.StringBuilder提供与StringBuffer兼容的API.StringBuffer是同步的,StringBuilder不是.请查看此链接以获取更多信息.