Подтвердить что ты не робот

Правильная строка формата для String.format или аналогичной

Я уверен, что раньше я использовал String.format:

String.format("Some {1}, {2}, {3}", var1, var2, var3);

Позволяет ли это звонить кому угодно? Может быть, я думаю о С#, есть ли способ добиться того же в java?

Я знаю, что вы можете сделать что-то вроде:

String.format("Some %s, %d, %s", aString, aNumber, aString)

но синтаксис, который я за ним, для первого...

4b9b3361

Ответ 1

То, что вы ищете, это MessageFormat, который использует заданный формат и входные параметры, например

MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3);

И как уже упоминалось, String.format все еще может выполнять задание с использованием альтернативного синтаксиса, но он менее эффективен в функциональности, а не в том, что вы запросили.

Ответ 2

Да, это типичная строка format в С#. В Java вы можете использовать последнее, то есть String.format("%s %d %d", ...).

Альтернативой является использование MessageFormat.format("Some {0}, {1}, {2}", var1, var2, var3), в котором используется нотация фигурных скобок .NET, как упоминается @Tobias, хотя для этого требуется импортировать java.text.MessageFormat. Они также более подходят для использования локализованных ресурсов, где обычно есть внешние файлы .properties с сообщениями в формате Error {0} ocurred due to {1}.

Ответ 3

Мне не нравится указывать как индекс параметра, так и его тип - в основном при метании исключения и подготовке сообщения для него. Мне нравится способ SLF4j. Поэтому я завернул org.slf4j.helpers.MessageFormatter следующим образом:

public static String subst(String string, Object...objects) {
    return MessageFormatter.arrayFormat(string, objects).getMessage();
}

Затем вы можете использовать его следующим образом:

public void main(String[] args) {
    throw new RuntimeException(MyUtils.subst("Problem with A={} and B={}!", a, b));
}