Article by: Manish Methani
Last Updated: September 28, 2021 at 8:04am IST
Strings, which are widely used in Java programming, are a sequence of characters. In the Java programming language, strings are objects. The Java platform provides the String class to create and manipulate strings.
The most common way to create a string in Java is
String greeting = "Hello world!"
In this case, "hello world" is a string literal also known as a sequence of characters enclosed in double-quotes. Whenever string literals are encountered, a compiler creates a String object with its value.
The string class provides a way to format the strings using the string format() method. The string format() method returns a String object rather than a PrintStream object.
The string format() method allows you to create a formatted string that you can reuse, as opposed to a one-time print statement. For example instead of
System.out.printf("The value of float is %f" +
"The value of integer is %d", floatVar, Intvar );
String fs;
fs = String.format("The value of float is %f" + "The value of integer is %d", floatVar, Intvar System.out.println(fs);
In the given java program, StringBuilder class is created along with Formatter class with the StringBuilder reference. In the next statement, we then used the format() method of formatter to create a formatted string. In the end, using the toString() method of StringBuilder we printed the output.
import java.util.*; import java.lang.*; import java.io.*; class StringFormatMethod { public static void main (String[] args) throws java.lang.Exception { StringBuilder sbuf = new StringBuilder(); Formatter fmt = new Formatter(sbuf); fmt.format("PI = %f%n", Math.PI); System.out.print(sbuf.toString()); } }
Have a quick look at various different format specifiers in java,
SPECIFIER | APPLIES TO | OUTPUT |
%a | floating point (except BigDecimal) | Hex output of floating point number |
%b | Any type | “true” if non-null, “false” if null |
%c | character | Unicode character |
%d | integer (incl. byte, short, int, long, bigint) | Decimal Integer |
%e | floating point | decimal number in scientific notation |
%f | floating point | decimal number |
%g | floating point | decimal number, possibly in scientific notation depending on the precision and value. |
%h | any type | Hex String of value from hashCode() method. |
%n | none | Platform-specific line separator. |
%o | integer (incl. byte, short, int, long, bigint) | Octal number |
%s | any type | String value |
%t | Date/Time (incl. long, Calendar, Date and TemporalAccessor) | %t is the prefix for Date/Time conversions. More formatting flags are needed after this. See Date/Time conversion below. |
%x | integer (incl. byte, short, int, long, bigint) |
Hex string. |
Note: Using the formatting characters with “%T” instead of “%t” in the table below makes the output uppercase.
FLAG | NOTES |
%tA | Full name of the day of the week, e.g. “Sunday “, “Monday “ |
%ta | Abbreviated name of the week day e.g. “Sun “, “Mon “, etc. |
%tB | Full name of the month e.g. “January “, “February “, etc. |
%tb | Abbreviated month name e.g. “Jan “, “Feb “, etc. |
%tC | Century part of year formatted with two digits e.g. “00” through “99”. |
%tc | Date and time formatted with “%ta %tb %td %tT %tZ %tY ” e.g. “Fri Feb 17 07:45:42 PST 2017 “ |
%tD | Date formatted as “%tm/%td/%ty “ |
%td | Day of the month formatted with two digits. e.g. “01 ” to “31 “. |
%te | Day of the month formatted without a leading 0 e.g. “1” to “31”. |
%tF | ISO 8601 formatted date with “%tY-%tm-%td “. |
%tH | Hour of the day for the 24-hour clock e.g. “00 ” to “23 “. |
%th | Same as %tb. |
%tI | Hour of the day for the 12-hour clock e.g. “01 ” – “12 “. |
%tj | Day of the year formatted with leading 0s e.g. “001 ” to “366 “. |
%tk | Hour of the day for the 24 hour clock without a leading 0 e.g. “0 ” to “23 “. |
%tl | Hour of the day for the 12-hour click without a leading 0 e.g. “1 ” to “12 “. |
%tM | Minute within the hour formatted a leading 0 e.g. “00 ” to “59 “. |
%tm | Month formatted with a leading 0 e.g. “01 ” to “12 “. |
%tN | Nanosecond formatted with 9 digits and leading 0s e.g. “000000000” to “999999999”. |
%tp | Locale specific “am” or “pm” marker. |
%tQ | Milliseconds since epoch Jan 1 , 1970 00:00:00 UTC. |
%tR | Time formatted as 24-hours e.g. “%tH:%tM “. |
%tr | Time formatted as 12-hours e.g. “%tI:%tM:%tS %Tp “. |
%tS | Seconds within the minute formatted with 2 digits e.g. “00” to “60”. “60” is required to support leap seconds. |
%ts | Seconds since the epoch Jan 1, 1970 00:00:00 UTC. |
%tT | Time formatted as 24-hours e.g. “%tH:%tM:%tS “. |
%tY | Year formatted with 4 digits e.g. “0000 ” to “9999 “. |
%ty | Year formatted with 2 digits e.g. “00 ” to “99 “. |
%tZ | Time zone abbreviation. e.g. “UTC “, “PST “, etc. |
%tz |
Time Zone Offset from GMT e.g. “ -0800
“. |
Argument indices allow programmers to reorder the output. Let us see an example.
import java.util.*; import java.lang.*; import java.io.*; class ArgumentIndexInjava { public static void main (String[] args) throws java.lang.Exception { System.out.printf("Before reordering = %s %s %s %s %s %s ", "1", "2", "3", "4", "5", "6" ); System.out.printf("After reordering = %6$s %5$s %4$s %3$s %2$s %1$s ","1", "2", "3", "4", "5", "6" ); System.out.printf("Before reordering = %d %d %d ", 101, 201, 301); System.out.printf("After reordering = %2$d %3$d %1$d ", 101, 201, 301); } }
Before reordering = 1 2 3 4 5 6 After reordering = 6 5 4 3 2 1 Before reordering = 101 201 301 After reordering = 201 301 101
To format integer in Java, usually %d format specifier is used. You can use %d format specifier for all the integer datatypes like byte, short, int, long, BigInteger.
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("%d", 50)); } }
50
String.format("|%20d|", 50);
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%10d|", 50)); } }
| 50|
String.format("|%-10d|", 50)
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%-10d|", 50)); } }
|50 |
String.format("|%010d|", 50);
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%010d|", 50));
} }
|0000000050|
By default, strings can be printed using %s format specifier. Have a look at the given java program, we have printed a string "Hello World" using %s format specifier.
import java.util.*; import java.lang.*; import java.io.*; class StringToCharacterConversionExample { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%s|", "Hello World")); } }
|Hello World|
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%20s|", "Hello World")); } }
| Hello World|
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%-20s|", "Hello World")); } }
|Hello World |
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%.5s|", "Hello World")); } }
|Hello|
import java.util.*; import java.lang.*; import java.io.*; class Codzify { public static void main (String[] args) throws java.lang.Exception { System.out.println(String.format("|%20.5s|", "Hello World")); } }
| Hello|
I hope you got a better understanding of how do string formatting in java works. Check out our related articles section to find more interesting articles to read. Keep coding :)