Существует ли способ создать Строку Java с помощью функции форматирования SLF4J-стиля?

Я услышал, что использование 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 по такой библиотеке, если это действительно существует?

15
задан Michael Myers 24 June 2010 в 22:02
поделиться

2 ответа

Для конкатенации строк один раз старый надежный «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 .

Все такие библиотеки сводятся к конкатенации строк на самом базовом уровне, поэтому большой разницы в производительности между ними не будет.

8
ответ дан 1 December 2019 в 02:09
поделиться

Вы уже можете сделать это, используя встроенный Java String класс .

-1
ответ дан 1 December 2019 в 02:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: