Параметризация строки Java
В одном из моих инструментов Java у меня есть несколько строк, которые создаются неоднократно с изменяющимися переменными, содержащимися в них так:
for (String value : values) {
// unrelated code omitted for clarity
String outputValue = "blah blah blah " + foo + " blah " + bar + " blah";
// code that writes out the created outputValue
}
Я не могу помочь, но чувствую, что это не лучший способ иметь "параметры" в некотором смысле в созданном String
, так как непараметрический текст всегда одинаков. Однако, насколько я понимаю, используя String.format
или аналогично подключению этих параметров на самом деле будет менее эффективным, чем простая конкатенация.
Есть ли лучший / более эффективный (с точки зрения времени, больше памяти) способ создания этих параметризованных строк?
4 ответа
насколько я понимаю, использование String.format или аналогичного для включения этих параметров будет на самом деле менее эффективным, чем простая конкатенация.
Какие доказательства у вас есть, чтобы подтвердить это? И почему вы думаете, что стоило бы беспокоиться в свете всего остального, что делает ваше приложение? Похоже, микро-оптимизация для меня.
Я бы порекомендовал любое шаблонное решение, например, Velocity, если ваши потребности обширны.
Наиболее эффективный способ, вероятно, будет с StringBuilder.
StringBuilder builder = new StringBuilder("blah blah blah");
builder.append(yourvalue).append("blah");
Что позволяет StringBuilder - это избегать множественных и дорогих конкатенаций String. Когда вы, наконец, сделали, просто позвоните builder.toString()
чтобы получить финальную строку.
Это компромисс между приятным для чтения однострочником и супер эффективным труднодоступным фрагментом кода, использующим StringBuffer
или же StringBuilder
, Так что нет универсального ответа на этот вопрос, я думаю. Зависит от того, какое качество для вас более ценно (удобочитаемость -> удобство обслуживания или производительность), сколько раз оно вызывается, действительно ли это узкое место в вашем приложении и т. Д.
Вот хорошее резюме
Не пытайтесь оптимизировать это помимо использования String.format
или же StringBuilder.append
вместо конкатенации строк с + (особенно в циклах).