当option为null时,如何从格式表达式中排除参数?

时间:2014-12-20 14:18:48

标签: java core formatter

这是我的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方法中的表达式。

2 个答案:

答案 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之前的初始空格。