String.format() takes an array as a single argument

java, string, string-formatting

Solution

The problem is that after the cast to `Object`, the compiler doesn't know that you're passing an array. Try casting the second argument to `(Object[])` instead of `(Object)`.

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

Or just don't use a cast at all:

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

although that might generate a compiler warning. (See this answer for a little more info.)

The cleanest, I think, would be to avoid a `String[]` in the first place:

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

Problem

Why this does work OK?: ``` String f = "Mi name is %s %s."; System.out.println(String.format(f, "John", "Connor")); ``` And this doesnt?: ``` String f = "Mi name is %s %s."; System.out.println(String.format(f, (Object)new String[]{"John","Connor"})); ``` If the method String.format takes a vararg Object? It compiles OK but when I execute this the String.format() takes the vararg Object as a single an unique argument (the toString() value of the array itself), so it throws a MissingFormatArgumentException because it cannot match with the second string specifier (%s). How can I make it work? Thanks in advance, any help will be greatly appreciated.

Original source

Related problems