Параметризация строки 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 вместо конкатенации строк с + (особенно в циклах).

Другие вопросы по тегам