是否有类似于 sl4fj 的通用字符串替换函数?

2022-08-31 10:54:12

使用sl4fj,如果我想构造一个字符串消息,有一个很好的方法,它利用了替换。例如,它可能类似于:

logger.info("Action {} occured on object {}.", objectA.getAction(), objectB);

如果需要的替换次数超过几个,则如下所示:

logger.info("Action {} occured on object {} with outcome {}.", 
    new Object[]{objectA.getAction(), objectB, outcome});

我的问题是:有没有一种通用的方法来创建一个字符串(而不仅仅是一个slf4j日志消息)?像这样:

String str = someMethod("Action {} occured on object {}.", objectA.getAction(), objectB);

String str = someMethod("Action {} occured on object {} with outcome {}.", 
    new Object[]{objectA.getAction(), objectB, outcome});

如果它在标准的Java库中,那么“someMethod”会是什么?


答案 1

字符串格式

String str = String.format("Action %s occured on object %s.",
   objectA.getAction(), objectB);

String str = String.format("Action %s occured on object %s with outcome %s.",
   new Object[]{objectA.getAction(), objectB, outcome});

您还可以使用数字位置,例如切换参数:

String str = String.format("Action %2$s occured on object %1$s.",
   objectA.getAction(), objectB);

答案 2

您可以使用 String.formatMessageFormat.format

例如,

MessageFormat.format("A sample value {1} with a sample string {0}", 
    new Object[] {"first", 1});

或简称

MessageFormat.format("A sample value {1} with a sample string {0}", "first", 1);

推荐