我正在尝试使用java.util.logging.Logger.log(Level, String)
方法将一些参数打印到控制台中。但是参数总是逐字打印:
package loggertest;
import java.util.logging.Level;
import java.util.logging.Logger;
public class LoggerTest {
public static void main(String[] args) {
final Logger LOGGER = Logger.getLogger(LoggerTest.class.getName());
LOGGER.log(Level.INFO, "Some info: {0}.", "foo");
LOGGER.log(Level.INFO, "Some quoted info: '{0}'.", "foo");
}
}
当我在Netbeans中运行时,输出为:
Jan 17, 2017 12:13:43 PM loggertest.LoggerTest main INFO: Some info: foo. Jan 17, 2017 12:13:43 PM loggertest.LoggerTest main INFO: Some quoted info: {0}.
显然,当我们在单引号内使用参数(即'{0}'
)时,它们会逐字打印。为什么会发生这种情况?我该如何解决这个问题呢?
答案 0 :(得分:1)
出现此问题的原因是java.text.MessageFormat
为being used。
引用MessageFormat
:
在
String
中,一对单引号可用于引用除单引号之外的任意字符。例如,模式字符串"'{0}'"
表示字符串"{0}"
,而不是FormatElement
。单引号本身必须在整个String中用双引号''
表示。
所以,解决方法就是:
LOGGER.log(Level.INFO, "Some correctly quoted info: ''{0}''.", "foo");
这将打印:
Jan 17, 2017 12:37:58 PM loggertest.LoggerTest main INFO: Some correctly quoted info: 'foo'.