String.format() is Capitalizing Arguments

It is a perfectly documented behavior even if not a well known one (probably because it's neither an obvious need nor something very useful).

From the javadoc :

The following table summarizes the supported conversions. Conversions denoted by an upper-case character (i.e. 'B', 'H', 'S', 'C', 'X', 'E', 'G', 'A', and 'T') are the same as those for the corresponding lower-case conversion characters except that the result is converted to upper case according to the rules of the prevailing Locale. The result is equivalent to the following invocation of String.toUpperCase()


In your format string, you have a %S, and it should be a %s. I haven't currently found any documentation on this behavior, but all string selectors (%s,%f, etc.) should be lowercase.