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
对于一个最初是空的。
我认为(但我可能错了)使用 StringBuffer 而不是 StringBuilder 的原因是为了保持与 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"
注意: StringBuilder 仅由一个线程使用时使用。StringBuilder 提供了与 StringBuffer 兼容的 API。StringBuffer 是同步的,StringBuilder 不是。检查此链接以获取更多信息。
String.leftShift()
创建一个 StringBuffer。
AFAICS,您不能通过常规语法糖创建字符串生成器。您只能显式创建 StringBuilder。String或GString上没有运算符重载会创建可以显式使用的 StringBuilder。Java 字符串连接可能会创建一个 StringBuilder,但该实例无法在您的代码中使用。
在撰写此答案时:
<<=
. <<=
只是一个使用<<
. 特别是,没有重载 <<=
的方法。''<<'' //4 single quotes, not double quotes
. 双引号工作正常,至少在现代 groovy 上。<<
以下代码显示,对于vs<<=
和""
vs的各种组合的结果,我们总是得到一个 StringBuffer,而不是 StringBuilder ''
:
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