String.format()将数组作为单个参数

时间:2012-07-18 05:46:02

标签: java string string-formatting

为什么这样可以正常工作?:

String f = "Mi name is %s %s.";
System.out.println(String.format(f, "John", "Connor"));

这不是吗?:

String f = "Mi name is %s %s.";
System.out.println(String.format(f, (Object)new String[]{"John","Connor"}));

如果方法String.format采用vararg对象?

它编译好但是当我执行它时,String.format()将vararg对象作为唯一的参数(数组本身的toString()值),因此它抛出一个MissingFormatArgumentException,因为它无法与第二个字符串说明符(%s)。

我怎样才能让它发挥作用? 在此先感谢,任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:14)

使用此:(我建议这样做)

String f = "Mi name is %s %s.";
System.out.println(String.format(f, (Object[])new String[]{"John","Connor"}));

OR

String f = "Mi name is %s %s.";
System.out.println(String.format(f, new String[]{"John","Connor"}));

但如果您使用这种方式,您将收到以下警告: String []类型的参数应该显式地转换为Object [],以便从String类型调用varargs方法格式(String,Object ...)。也可以将其转换为Object以进行varargs调用

答案 1 :(得分:5)

问题是在转换为Object之后,编译器不知道您正在传递数组。尝试将第二个参数转换为(Object[])而不是(Object)

System.out.println(String.format(f, (Object[])new String[]{"John","Connor"}));

或者根本不使用演员:

System.out.println(String.format(f, new String[]{"John","Connor"}));

(有关详细信息,请参阅this answer。)