簡體   English   中英

Groovy文字StringBuilder / StringBuffer

[英]Groovy literal StringBuilder/StringBuffer

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的兼容性。

要創建StringBuffer:

text = 'Hello '

附加:

text <<= 'World!'

這可能會有所幫助。

我剛剛在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,你不能通過groovy語法糖創建一個String Builder 您只能顯式創建StringBuilder。 StringGString上沒有運算符重載會創建一個可以顯式使用的StringBuilder。 Java String連接可能會創建一個StringBuilder ,但該實例在您的代碼中不可用。

在撰寫本答案時:

  • 另一個答案是用<<= <<=僅僅是一個使用<<java復合賦值 特別是,沒有重載 <<=方法。
  • 接受的答案是說使用''<<'' //4 single quotes, not double quotes 雙引號工作正常,至少在現代時尚。

以下代碼顯示我們總是得到一個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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM