Printf 在Java中的用法介绍
How printf() works?
String account = "Prime";
double total = 210.35;
int years = 5;
System.out.printf("The %s account saved you $%f over %d years\n",
account, total, years);
printf() and format() methods
A programmer can adjust the way that a program's output appears, a task known as output formatting. The standard output stream System.out provides the methods printf() and format() for output formatting. Both methods are equivalent, so this discussion only refers to printf().
The first argument of the printf() method, the format string, specifies the format of the text to print along with any number of placeholders for printing numeric values. The placeholders are known as format specifiers. A format specifier specifies the type of value to print in its place. A format specifier begins with the % character followed by another character that indicates the value type to be printed. Ex: %d indicates an integer type, and %s indicates a string type.
Table 1: Format specifiers for the printf() and format() methods.
Format specifier | Data type(s) | Notes |
---|---|---|
%c | char | Prints a single Unicode character |
%d | int, long, short | Prints a decimal integer value. |
%o | int, long, short | Prints an octal integer value. |
%h | int, char, long, short | Prints a hexadecimal integer value. |
%f | float, double | Prints a floating-point value. |
%e | float, double | Prints a floating-point value in scientific notation. |
%s | String | Prints the characters in a String variable or literal. |
%% | Prints the "%" character. | |
%n | Prints the platform-specific new-line character. |
Floating-point values
Formatting floating-point output is commonly done using sub-specifiers. A sub-specifier provides formatting options for a format specifier and are included between the % and format specifier character. Ex: The .1 sub-specifier in printf("%.1f", myFloat);
causes the floating-point variable myFloat to be output with only 1 digit after the decimal point; if myFloat is 12.34, the output would be 12.3. Format specifiers and sub-specifiers use the following form:
%(flags)(width)(.precision)specifier
The table below summarizes the floating-point sub-specifiers available. Assume myFloat has a value of 12.34. Recall that %f is used for floating-point values and %e is used to display floating-point values in scientific notation.
Table 2: Floating-point formatting
Method calls to printf() apply to PrintStream objects like System.out.
Sub-specifier | Description | Example |
---|---|---|
width | Specifies the minimum number of characters to print. If the formatted value has more characters than the width, the value will not be truncated. If the formatted value has fewer characters than the width, the output will be padded with spaces (or 0's if the '0' flag is specified). | printf("Value: %7.2f", myFloat); Value: 12.34 |
.precision | Specifies the number of digits to print following the decimal point. If the precision is not specified, a default precision of 6 is used. | printf("%.4f", myFloat); 12.3400 printf("%3.4e", myFloat); 1.2340e+01 |
flags | -: Left aligns the output given the specified width, padding the output with spaces. +: Prints a preceding + sign for positive values. Negative numbers are always printed with the - sign. 0: Pads the output with 0's when the formatted value has fewer characters than the width. space: Prints a preceding space for positive value. | printf("%+f", myFloat); +12.340000 printf("%08.2f", myFloat); 00012.34 |
Integer values
Formatting of integer values is also done using sub-specifiers. The integer sub-specifiers are similar to the floating-point sub-specifiers except no .precision exists. For the table below, assume myInt is 301.
Table 3 Integer formatting.
Method calls to printf() apply to PrintStream objects like System.out.
Sub-specifier | Description | Example |
---|---|---|
width | Specifies the minimum number of characters to print. If the formatted value has more characters than the width, the value will not be truncated. If the formatted value has fewer characters than the width, the output will be padded with spaces (or 0's if the '0' flag is specified). | printf("Value: %7d", myInt); Value: 301 |
flags | -: Left aligns the output given the specified width, padding the output with spaces. +: Print a preceding + sign for positive values. Negative numbers are always printed with the - sign. 0: Pads the output with 0's when the formatted value has fewer characters than the width. space: Prints a preceding space for positive value. | printf("%+d", myInt); +301 printf("%08d", myInt); 00000301 printf("%+08d", myInt); +0000301 |
Strings
Strings may be formatted using sub-specifiers. For the table below, assume the myString variable is "Formatting".
Table 4: String formatting.
Method calls to printf() apply to PrintStream objects like System.out.
Sub-specifier | Description | Example |
---|---|---|
width | Specifies the minimum number of characters to print. If the string has more characters than the width, the value will not be truncated. If the formatted value has fewer characters than the width, the output will be padded with spaces. | printf("%20s String", myString); Formatting String |
.precision | Specifies the maximum number of characters to print. If the string has more characters than the precision, the string will be truncated. | printf("%.6s", myString); Format |
flags | -: Left aligns the output given the specified width, padding the output with spaces. | printf("%-20s String", myString); Formatting String |
Flushing output
Printing characters from the buffer to the output device (e.g., screen) requires a time-consuming reservation of processor resources. Once the resources are reserved, moving characters is fast, whether there is 1 character or 50 characters to print.
To preserve resources, the system may wait until the buffer is full, or at least has a certain number of characters before moving them to the output device. Or, with fewer characters in the buffer, the system may wait until the resources are not busy. Sometimes a programmer does not want the system to wait. Ex: In a very processor-intensive program, waiting could cause delayed and/or jittery output.
The PrintStream method flush() flushes the stream's buffer contents. Ex: The statement System.out.flush();
writes the contents of the buffer for System.out to the computer screen. Most Java implementations make System.out flush when a newline character is output or println() method is called.
评论已关闭