Groovy文字StringBuilder / StringBuffer

时间:2009-11-25 14:56:52

标签: groovy stringbuilder

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

def sb = new StringBuilder()

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

4 个答案:

答案 0 :(得分:22)

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

def sb = 'Hello'<<''

甚至:

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

最初是空的。

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

答案 1 :(得分:14)

创建StringBuffer:

text = 'Hello '

追加:

text <<= 'World!'

And this might help some more.

答案 2 :(得分:10)

我刚刚在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"

注意: 当StringBuilder仅由一个线程使用时使用。 StringBuilder提供与StringBuffer兼容的API。 StringBuffer是同步的,StringBuilder不是。请查看此link了解详情。

答案 3 :(得分:0)

String.leftShift() creates a StringBuffer

AFAICS,您无法通过常规的语法糖来创建String Builder 。您只能显式创建StringBuilder。 StringGString上的运算符重载都不会创建可以显式​​使用的StringBuilder。 Java字符串串联might create a StringBuilder,但该实例在您的代码中不可用。

在撰写此答案时:

  • 另一个答案是说要使用<<=<<=仅仅是使用<<的{​​{3}}。特别是,java compound assignment <<=没有方法。
  • 接受的答案说使用''<<'' //4 single quotes, not double quotes。至少在现代习惯上,双引号可以很好地工作。

以下代码显示,由于<<<<=""''的各种组合,我们总是得到StringBuffer而不是StringBuilder:< / p>

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