Примитивный вопрос, но как я могу форматировать строки следующим образом:
"Шаг {1} из {2}"
заменив переменные с помощью Java? В С# это легко.
Примитивный вопрос, но как я могу форматировать строки следующим образом:
"Шаг {1} из {2}"
заменив переменные с помощью Java? В С# это легко.
В дополнение к String.format также посмотрите java.text.MessageFormat
. Формат менее точный и немного ближе к примеру С#, который вы предоставили, и вы также можете использовать его для синтаксического анализа.
Например:
int someNumber = 42;
String someString = "foobar";
Object[] args = {new Long(someNumber), someString};
MessageFormat fmt = new MessageFormat("String is \"{1}\", number is {0}.");
System.out.println(fmt.format(args));
Более приятный пример использует преимущества улучшений varargs и autoboxing в Java 1.5 и превращает их в однострочный:
MessageFormat.format("String is \"{1}\", number is {0}.", 42, "foobar");
MessageFormat
немного лучше для выполнения множественных множественных чисел с модификатором выбора. Чтобы указать сообщение, которое правильно использует сингулярную форму, когда переменная равна 1 и во множественном числе, вы можете сделать что-то вроде этого:
String formatString = "there were {0} {0,choice,0#objects|1#object|1<objects}";
MessageFormat fmt = new MessageFormat(formatString);
fmt.format(new Object[] { new Long(numberOfObjects) });
Посмотрите String.format. Обратите внимание, однако, что он принимает спецификаторы форматирования, аналогичные свойствам семейства функций printf семейства C printf, например:
String.format("Hello %s, %d", "world", 42);
Вернет "Hello world 42". Вы можете найти этот полезный при изучении спецификаторов формата. Энди Томас-Крамер был достаточно любезен, чтобы оставить ссылку в комментарии ниже, который, как представляется, указывает на официальную спецификацию. Наиболее часто используемые:
Это радикально отличается от С#, который использует позиционные ссылки с дополнительным спецификатором формата. Это означает, что вы не можете делать такие вещи, как:
String.format("The {0} is repeated again: {0}", "word");
... без фактического повторения параметра, переданного в printf/format. (см. комментарий Scrum Meister ниже)
Если вы хотите просто распечатать результат напрямую, вы можете найти System.out.printf(PrintStream.printf) по своему усмотрению.
Если вы решите не использовать String.format, другой вариант - это + двоичный оператор
String str = "Step " + a + " of " + b;
Это эквивалент
new StringBuilder("Step ").append(String.valueOf(1)).append(" of ").append(String.valueOf(2));
Какой бы вы ни использовали, это ваш выбор. StringBuilder быстрее, но разница в скорости незначительна. Я предпочитаю использовать оператор +
(который делает StringBuilder.append(String.valueOf(X)))
и его легче читать.
public class StringFormat {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println("================================");
for(int i=0;i<3;i++){
String s1=sc.next();
int x=sc.nextInt();
System.out.println(String.format("%-15s%03d",s1,x));
}
System.out.println("================================");
}
}
outpot "================================"
ved15space123 ved15space123 ved15space123 "================================
Java-решение
"-" используется для удаления отступа
"15" задает минимальную длину строки, которая составляет 15
Я написал для него свой простой метод:
public class SomeCommons {
/** Message Format like 'Some String {0} / {1}' with arguments */
public static String msgFormat(String s, Object... args) {
return new MessageFormat(s).format(args);
}
}
чтобы вы могли использовать его как:
SomeCommons.msfgFormat("Step {1} of {2}", 1 , "two");