Groovy支持使用文字语法来创建StringBuilder/StringBuffer,而不是通常的
def sb = new StringBuilder()
然而,我似乎无法记住(或在谷歌上找到)正确的语法。
Groovy支持使用文字语法来创建StringBuilder/StringBuffer,而不是通常的
def sb = new StringBuilder()
然而,我似乎无法记住(或在谷歌上找到)正确的语法。
要以一步获取StringBuffer,您可以使用
def sb = 'Hello'<<''
或者甚至:
def sb = ''<<'' //4 single quotes, not double quotes
对于一个最初为空的字符串,我认为(但我可能错了),使用StringBuffer而不是StringBuilder的原因是为了保持与Java 1.4的兼容性。
StringBuffer
。 - Dónal<<=
运算符。稍后你可以只使用<<
。此外,你对于StringBuffer
的理解是正确的,这也是他们允许使用[]
运算符进行原地字符替换的方式。 - omerkudat我刚刚在 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不是。请查看此链接获取更多信息。
<<=
。 <<=
只是一个java复合赋值,使用了 <<
。特别地,没有一种方法可以重载 <<=
。''<<'' //4个单引号,不是双引号
。双引号在现代 Groovy 上也可以正常工作。下面的代码表明,我们总是得到一个 StringBuffer,而不是 StringBuilder,对于各种组合的 <<
vs <<=
和 ""
vs ''
:
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
sb.append("text")
会将您的字符串连接起来。 - IgniteCoders