2009-11-25 53 views
15

Groovy支持創建一個StringBuilder/StringBuffer的,而不是通常Groovy的字面的StringBuilder/StringBuffer的

def sb = new StringBuilder() 

的。然而文字語法,我似乎無法記住(或找到谷歌)正確的語法。

+0

'sb.append(「text」)'將會連接你的字符串 – IgniteCoders 2016-01-19 15:23:43

回答

17

要在一個單一的步驟得到一個StringBuffer,你可以使用

def sb = 'Hello'<<'' 

或甚至:

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

最初爲空的。

我認爲(但我可能是錯的)使用StringBuffer而不是StringBuilder的原因是爲了保持與Java 1.4的兼容性。

+0

如果您需要安全地連接字符串,您還可以在當前的Java版本中使用'StringBuffer' – 2016-01-20 12:28:03

13

要創建一個StringBuilder

text = 'Hello ' 

要追加

text <<= 'World!' 

And this might help some more.

+0

只有當使用'<< ='操作符時,看起來該文本才從String轉換爲StringBuilder,是否正確? 另外,它實際上是一個StringBuffer而不是一個StringBuilder – 2009-11-25 15:20:38

+0

是的,實際上我的例子可能過於簡單。您需要轉換並重新分配給StringBuffer,例如'<< ='運算符。稍後你可以使用'<<'。同樣,你對'StringBuffer'也是正確的,這就是他們如何使用'[]'操作符允許就地字符替換。 – omerkudat 2009-11-25 15:30:24

8

我剛剛在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瞭解更多信息。