Примитивный вопрос, но как мне отформатировать строки так:
«Шаг {1} из {2}»
путем замены переменных с помощью Java? В C # это легко.
java
string
string-formatting
катит
источник
источник
Ответы:
В дополнение к String.format, также посмотрите
java.text.MessageFormat
. Формат менее лаконичен и немного ближе к примеру C #, который вы предоставили, и вы также можете использовать его для анализа.Например:
Более хороший пример использует преимущества улучшений varargs и autoboxing в Java 1.5 и превращает вышеперечисленное в однострочник:
MessageFormat
немного лучше для создания i18nized множественного числа с модификатором выбора. Чтобы указать сообщение, которое правильно использует форму единственного числа, когда переменная равна 1, в противном случае вы можете сделать что-то вроде этого:источник
MessageFormat.format("Number {0}", 1234));
зависимости от локали по умолчанию может выдаватьNumber 1,234
вместоNumber 1234
.{0} it ll take firstname
, когда{1} then lastname
, как это так. Это возможно как-{0,choice,0.getFirstName()}
то так?Посмотрите на String.format . Однако обратите внимание, что он принимает спецификаторы формата, аналогичные спецификациям семейства функций printf в C - например:
Вернул бы "Привет мир, 42". Вы можете найти это полезно при изучении спецификаторов формата. Энди Томас-Крамер был достаточно любезен, чтобы оставить эту ссылку в комментарии ниже, который указывает на официальную спецификацию. Наиболее часто используемые из них:
Это радикально отличается от C #, который использует позиционные ссылки с необязательным спецификатором формата.
Это означает, что вы не можете делать такие вещи, как:...
без фактического повторения параметра, переданного в printf / format.(см. комментарий The Scrum Meister ниже)Если вы просто хотите напечатать результат напрямую, вы можете найти System.out.printf ( PrintStream.printf ) по своему вкусу.
источник
String.format
также могут занимать числовые позиции:String.format("%2$s %1$s", "foo", "bar");
будут выводитьсяbar foo
Если вы решите не использовать String.format, другой вариант - двоичный оператор +
Это эквивалент
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Что бы вы ни использовали, это ваш выбор. StringBuilder быстрее, но разница в скорости незначительна. Я предпочитаю использовать
+
оператор (который делаетStringBuilder.append(String.valueOf(X)))
и легче читать.источник
+
работает оператор. 2) Ваше объяснение даже не точное.+
эквивалентно использованиюStringBuilder
, а неString.concat
. (Слишком много информации об этом.)Я написал свой простой метод для этого:
так что вы можете использовать его как:
источник
Решение Java
"-" используется, чтобы оставить отступ
«15» делает минимальную длину строки равной 15
источник
Это решение сработало для меня. Мне нужно было динамически создавать URL для REST-клиента, поэтому я создал этот метод, поэтому вам просто нужно передать restURL следующим образом
и добавьте столько параметров, сколько вам нужно:
Вам просто нужно вызвать этот метод так:
Выход
источник
Я написал эту функцию, она делает все правильно. Интерполируйте слово, начинающееся со
$
значения переменной с тем же именем.источник