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

2022-09-03 12:35:23

为什么这确实有效?:

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 Object?

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

我怎样才能让它工作?提前致谢,任何帮助将不胜感激。


答案 1

使用这个:(我会推荐这种方式)

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

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

但是,如果您以这种方式使用,您将收到以下警告:

类型的参数应显式转换为,以便从类型 调用方法。也可以将其转换为调用。String[]Object[]varargsformat(String, Object...)StringObjectvarargs


答案 2

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

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

或者只是根本不使用强制转换:

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

(有关详细信息,请参阅此答案