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.
StringBuffer
в текущих версиях Java, если вам нужно объединить строки потокобезопасно.
- person Dónal; 20.01.2016
Чтобы создать StringBuffer:
text = 'Hello '
Чтобы добавить:
text <<= 'World!'
И это может помочь еще немного.
<<=
. Позже вы можете просто использовать <<
. Также вы правы насчет StringBuffer
, именно так они разрешили замену символов на месте с помощью оператора []
.
- person omerkudat; 25.11.2009
Я только что играл с 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 — нет. Проверьте эту ссылку для получения дополнительной информации.
"The sum of 2 and 3 equals ${2 + 3}"
в качестве примера.
- person willkil; 11.03.2019
String.leftShift()
создает StringBuffer.
AFAICS, вы не можете создать StringBuilder с помощью синтаксического сахара groovy. Вы можете создать StringBuilder только явно. Нет перегрузки оператора для String или GString создает StringBuilder, который вы можете явно использовать. Объединение строк Java может создать StringBuilder, но этот экземпляр нельзя будет использовать в вашем коде.
На момент написания этого ответа:
<<=
. <<=
— это просто составной код Java задание, в котором используется <<
. В частности, не существует способа перегрузки <<=
.''<<'' //4 single quotes, not double quotes
. Двойные кавычки работают нормально, по крайней мере, на современном groovy.Следующий код показывает, что мы всегда получаем 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
sb.append("text")
объединит ваши строки - person IgniteCoders   schedule 19.01.2016