Groovy литерал StringBuilder/StringBuffer

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

def sb = new StringBuilder()

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

Ответы

Ответ 1

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

def sb = 'Hello'<<''

или даже:

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

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

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

Ответ 3

Я только что играл с 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 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 - нет. Для получения дополнительной информации см. Ссылку .