String Formatting in Mercury
Our first program will demonstrate string formatting in Java. Here’s the full source code with examples of common string formatting tasks.
import java.util.Formatter;
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public class StringFormatting {
public static void main(String[] args) {
// Java offers several printing methods for formatting general Java values.
// For example, this prints an instance of our Point class.
Point p = new Point(1, 2);
System.out.printf("struct1: %s%n", p);
// If the value is an object, you can use reflection to include the field names.
System.out.printf("struct2: x=%d, y=%d%n", p.x, p.y);
// To print the type of a value, use getClass().getSimpleName().
System.out.printf("type: %s%n", p.getClass().getSimpleName());
// Formatting booleans is straightforward.
System.out.printf("bool: %b%n", true);
// There are many options for formatting integers.
// Use %d for standard, base-10 formatting.
System.out.printf("int: %d%n", 123);
// This prints a binary representation.
System.out.printf("bin: %s%n", Integer.toBinaryString(14));
// This prints the character corresponding to the given integer.
System.out.printf("char: %c%n", 33);
// %x provides hex encoding.
System.out.printf("hex: %x%n", 456);
// There are also several formatting options for floats.
// For basic decimal formatting use %f.
System.out.printf("float1: %f%n", 78.9);
// %e and %E format the float in (slightly different versions of) scientific notation.
System.out.printf("float2: %e%n", 123400000.0);
System.out.printf("float3: %E%n", 123400000.0);
// For basic string printing use %s.
System.out.printf("str1: %s%n", "\"string\"");
// To double-quote strings, you can manually add the quotes.
System.out.printf("str2: \"%s\"%n", "string");
// To print a representation of a pointer (object reference in Java), use %h.
System.out.printf("pointer: %h%n", p);
// When formatting numbers you will often want to control the width and precision of the resulting figure.
// To specify the width of an integer, use a number after the % in the format specifier.
System.out.printf("width1: |%6d|%6d|%n", 12, 345);
// You can also specify the width of printed floats,
// though usually you'll also want to restrict the decimal precision at the same time.
System.out.printf("width2: |%6.2f|%6.2f|%n", 1.2, 3.45);
// To left-justify, use the - flag.
System.out.printf("width3: |%-6.2f|%-6.2f|%n", 1.2, 3.45);
// You may also want to control width when formatting strings,
// especially to ensure that they align in table-like output.
System.out.printf("width4: |%6s|%6s|%n", "foo", "b");
// To left-justify use the - flag as with numbers.
System.out.printf("width5: |%-6s|%-6s|%n", "foo", "b");
// String.format() formats and returns a string without printing it anywhere.
String s = String.format("sprintf: a %s", "string");
System.out.println(s);
// You can format+print to other output streams using Formatter.
Formatter stderr = new Formatter(System.err);
stderr.format("io: an %s%n", "error");
stderr.close();
}
}To run the program, compile it and use java:
$ javac StringFormatting.java
$ java StringFormatting
struct1: Point@4617c264
struct2: x=1, y=2
type: Point
bool: true
int: 123
bin: 1110
char: !
hex: 1c8
float1: 78.900000
float2: 1.234000e+08
float3: 1.234000E+08
str1: "string"
str2: "string"
pointer: 4617c264
width1: | 12| 345|
width2: | 1.20| 3.45|
width3: |1.20 |3.45 |
width4: | foo| b|
width5: |foo |b |
sprintf: a string
io: an errorThis example demonstrates various string formatting techniques in Java, which are similar to those in other languages but with some Java-specific syntax and methods. The System.out.printf() method is used for most formatting operations, which is analogous to fmt.Printf(). For creating formatted strings without printing, Java uses String.format().
Comments powered by Disqus