用"?"格式化字符串的方法 java中的完整字符串参数?

pop*_*lka 10 java string parameters logging format-string

例如,我想用方法实现类

public class Logger {

    public void info(String message, String[] params) {
    }
}
Run Code Online (Sandbox Code Playgroud)

如果是输入

new Logger().info("Info: param1 is ? , param2 is ?", new  String[] {"a", "b"});
Run Code Online (Sandbox Code Playgroud)

输出必须是

Info: param1 is a , param2 is b
Run Code Online (Sandbox Code Playgroud)

实现它的最简单方法是什么?

Buh*_*ndi 23

您可以使用此String.format(String format, Object ... args)方法.?您可以使用C样式%x格式,而不是使用a ,x可以是d(对于int),s(对于字符串)等.

例子.

此外,您还可以查看Formatter.format类方法.它显示了格式化所有格式化标记(String.format()方法用于Formatter进行格式化).


hoi*_*loi 5

以下代码可以根据需要执行.

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);
    }

}
Run Code Online (Sandbox Code Playgroud)

但是,您应该考虑使用正确的格式化占位符而不是"?".例如:

 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);
    }

}
Run Code Online (Sandbox Code Playgroud)

两个版本都将打印:

Info: param1 is a, param2 is b
Info: param1 is a, param2 is b
Run Code Online (Sandbox Code Playgroud)