Я услышал, что использование StringBuilder быстрее, чем использование конкатенации строк, но я устал от борьбы с StringBuilder объектами всем временем. Я был недавно подвергнут библиотеке входа SLF4J, и я люблю, "просто делают правильную вещь" простота ее форматирования по сравнению с String.format. Есть ли библиотека там, которая позволила бы мне писать что-то как:
int myInteger = 42;
MyObject myObject = new MyObject(); // Overrides toString()
String result = CoolFormatingLibrary.format("Simple way to format {} and {}",
myInteger, myObject);
Кроме того, есть ли какая-либо причина (включая производительность, но, исключая мелкомодульное управление даты и форматирование значащей цифры), почему я мог бы хотеть использовать String.format по такой библиотеке, если это действительно существует?
Для конкатенации строк один раз старый надежный «str» + param + «other str»
отлично подходит (фактически он преобразован компилятор в StringBuilder
).
StringBuilders в основном полезны, если вам нужно постоянно добавлять элементы в строку, но вы не можете собрать их все в одном операторе. Например, возьмем цикл for:
String str = "";
for (int i = 0; i < 1000000; i++) {
str += i + " "; // ignoring the last-iteration problem
}
Это будет работать намного медленнее, чем эквивалентная версия StringBuilder:
StringBuilder sb = new StringBuilder(); // for extra speed, define the size
for (int i = 0; i < 1000000; i++) {
sb.append(i).append(" ");
}
String str = sb.toString();
Но эти две функции функционально эквивалентны:
String str = var1 + " " + var2;
String str2 = new StringBuilder().append(var1).append(" ").append(var2).toString();
Проверить java.text.MessageFormat
. Пример кода из документации Javadocs:
int fileCount = 1273;
String diskName = "MyDisk";
Object[] testArgs = {new Long(fileCount), diskName};
MessageFormat form = new MessageFormat("The disk \"{1}\" contains {0} file(s).");
System.out.println(form.format(testArgs));
Вывод:
Диск «MyDisk» содержит 1 273 файла (ов).
Существует также метод статического формата
, который не требует создания объекта MessageFormat
.
Все такие библиотеки сводятся к конкатенации строк на самом базовом уровне, поэтому большой разницы в производительности между ними не будет.
Вы уже можете сделать это, используя встроенный Java String
класс .