这是我的java代码
System.out.format("a: %s b: %s c: %s", s1, s2, s3);
如果s2
为空,我想在没有a: <val> c: <val>
的情况下打印b: null
。如果s3
或任何其他param为null,我也想跳过它。
认为它应该是一些棘手的表达。
更新
没有if/else
逻辑!仅使用format
方法中的表达式。
答案 0 :(得分:1)
将此分为三个调用似乎更容易
System.out.format("a: %s", s1);
if (s != null)
System.out.format(" b: %s", s2);
System.out.format(" c: %s", s3);
如果你绝对想把它放在一个电话中,比如
System.out.format("a: %s%s%s c: %s", s1,
(s2==null)?"":" b: ",
(s2==null)?"":s2,
s3);
也可以。
答案 1 :(得分:1)
如果你坚持单行,这是一种可能性:
System.out.format(
(( s1 == null ? "" : "a: %1$s" )
+ ( s2 == null ? "" : " b: %2$s" )
+ ( s3 == null ? "" : " c: %3$s" )).trim(),
s1, s2, s3
);
(是的,从技术上讲,这不是一个单行,而是一个声明)。
想法:根据给定字符串是否为空来构建格式字符串。如果trim()
为空,b:
可以摆脱c:
或s1
之前的初始空格。