It is often the case that a product's requirements include detailed specifications about the format(s) used when presenting information to users. Java has many different ways to satisfy these kinds of requirements. This document discusses the most common.
It is possible in Java to create complicated String
objects using the concatenation operator however it is difficult to closely control the format of the result. For example, the width of the String
that is returned by "CS" + course
can't be controlled. On the other hand, the String
that is returned by String.format("CS%3d", course)
will contain exactly 5 characters.
The static format()
method in the String
class is passed one parameter called a format string and then any number of other parameters. In the above example, the format string is "CS%3d"
and the one other parameter is course
. A format string consists of String
literals and format specifiers. In the above example, the format specifier is %3d
.
Format specifiers have the following syntax.
%[flags][width][.precision]conversion |
Common values of conversion include b
for boolean
, c
for char
, d
for int
, e
for double
in scientific notation, f
for double
, and s
for String
.
Common values of the optional flag include -
for left-justified, +
to always include the sign, 0
to pad with zeros, ,
to use grouping separators, (
to put negative numbers in parentheses, and a space character to use a space for the sign of a postive number (as opposed to omitting it).
The optional width determines the total number of characters that this portion of the String
will contain. The optional precision determines the nnumbenr of digits to the right of the decimal point for double
values.
So, for example the format specifier %8d
indicates an int
that will be right-justified in a field of width 8. Similarly, the format specifier -%6.2f
indicates a double
that will be left-justified in a field of width 6 with 2 places to the right of the decimal point.
The format string in the invocation of the format()
method should have the same number of format specifiers as there are other parameters in the invocation. This is illustrated in the following example.
int year = 2017; double sales = 1050987.00; String s; s = String.format("Year: %4d, Sales: $%,14.2f", year, sales);
After this code is executed, s
will contain Year: 2017, Sales: $ 1,050,987.00
Obviously, once you have a formatted String
there are many things that you can do with it, including printing it (e.g., with either the print()
or println()
methods, both of which have a single String
parameter. For example, the previous example could easily be extended as follows.
int year = 2017; double sales = 1050987.00; String s; s = String.format("Year: %4d, Sales: $%,14.2f", year, sales); System.out.println(s);
However, when all you want to do is print a formatted String
, it is easier to do it in one step, rather than two (i.e., first calling format()
and then calling println()
. To accomodate this, all objects that have a println()
method also have a printf()
method that has the same syntax as the format()
method. Hence, the previous example could also be implemented as follows.
int year = 2017; double sales = 1050987.00; String s; System.out.printf("Year: %4d, Sales: $%,14.2f\n", year, sales);
Note the addition of the newline character to the end of the format string.