Способ форматирования строк с помощью?? параметры для полной строки в java?
Например, я хочу реализовать класс с методом
public class Logger {
public void info(String message, String[] params) {
}
}
Если ввод
new Logger().info("Info: param1 is ? , param2 is ?", new String[] {"a", "b"});
Вывод должен быть
Info: param1 is a , param2 is b
Каков самый простой способ его реализации?
Ответы
Ответ 1
Вы можете использовать метод String.format(String format, Object ... args)
. Вместо ?
вы можете использовать формат C style %x
, где x
может быть d
(для int), s
(для строки) и т.д.
Example.
Также вы можете просмотреть метод класса Formatter.format
. Он показывает все флаги форматирования acceptale для форматирования (String.format()
метод использует Formatter
для форматирования).
Ответ 2
Следующий код выполняет по мере необходимости.
public class Logger {
public static void main(String[] args) {
new Logger().info("Info: param1 is ?, param2 is ?", new String[] { "a", "b" });
new Logger().info("Info: param1 is ?, param2 is ?", "a", "b");
}
public void info(final String message, final String... args) {
System.out.printf(message.replace("?", "%s") + "%n", args);
}
}
Однако вам следует подумать об использовании правильных держателей форматов вместо "?". Например:
public class Logger {
public static void main(String[] args) {
new Logger().info("Info: param1 is %s, param2 is %s", new String[] { "a", "b" });
new Logger().info("Info: param1 is %s, param2 is %s", "a", "b");
}
public void info(final String message, final String... args) {
System.out.printf(message + "%n", args);
}
}
Обе версии будут печатать:
Info: param1 is a, param2 is b
Info: param1 is a, param2 is b
Ответ 3
Если вам не нужно беспокоиться об экранировании '?'
, и вы не можете использовать строки стиля стиля printf(), вы можете уйти с:
public void info(String message, String[] params) {
System.out.println(
String.format(message.replace("?", "%s"), params)
);
}
Так же:
info("apple is to ? as eve is to ?",
new String[] { "banana", "noon" });
Какие принты: apple is to banana as eve is to noon
Если вам нужна более сложная логика, например, экранирование, то вам, вероятно, понадобится полномасштабный поиск с регулярным выражением Pattern
и замена.
Ответ 4
в цикле на params [] используйте regexp, чтобы найти все '?' в вашей строке и замените ее текущим параметром. Остерегайтесь нулей и находите правильный способ побега? (угадайте, что-нибудь вызовет, лучше?)