2009-11-25 3 views
15

Groovy поддерживает синтаксис литерала для создания StringBuilder/StringBuffer вместо обычногоGroovy буквального StringBuilder/StringBuffer

def sb = new StringBuilder() 

Однако, я не могу вспомнить (или найти на Google) правильный синтаксис.

+0

'sb.append (" text ")' будет конкатенировать ваши строки – IgniteCoders

ответ

17

Чтобы получить StringBuffer в один шаг, вы можете использовать

def sb = 'Hello'<<'' 

или даже:

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

для первоначально пустого.

Я думаю (но я мог ошибаться), причина использования StringBuffer, а не StringBuilder заключается в поддержании совместимости с Java 1.4.

+0

Вы также должны использовать 'StringBuffer' в текущих версиях Java, если вам нужно конкатенировать строки поточно-безопасно –

13

Чтобы создать StringBuilder

text = 'Hello ' 

Дописывать

text <<= 'World!' 

And this might help some more.

+0

Кажется, что этот текст преобразуется из String в StringBuilder только при использовании оператора << <<. Кроме того, это фактически StringBuffer, а не StringBuilder –

+0

Да, на самом деле мой пример может быть слишком упрощенным. Вам нужно преобразовать и переназначить в StringBuffer, как таковой оператор '<< ='. Позже вы можете просто использовать '<<'. Также вы правы в 'StringBuffer', так как они разрешили замену на месте с использованием оператора' [] '. – omerkudat

8

Я только что играл с StringBuilder/StringBuffer в Groovy.

Некоторые примеры приведены ниже:

// << 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 предоставляет API, совместимый с StringBuffer. StringBuffer синхронизирован, StringBuilder - нет. Проверьте это link для получения дополнительной информации.

Смежные вопросы