String Formatting in Minitab

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 excellent support for string formatting using
        // the String.format method or the Formatter class. Here are
        // some examples of common string formatting tasks.

        // 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 %s to print its string representation.
        System.out.printf("struct2: %s%n", p);

        // To print the type of a value, use getClass().getName().
        System.out.printf("type: %s%n", p.getClass().getName());

        // 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 print a representation of a pointer (memory address), 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. By default the result will be right-justified
        // and padded with spaces.
        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 with the width.precision syntax.
        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. For basic right-justified width:
        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");

        // So far we've seen printf, which prints the formatted string to System.out.
        // 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();
    }
}

This Java code demonstrates various string formatting techniques similar to those shown in the Go example. Here are some key differences and explanations:

  1. Java uses System.out.printf() or String.format() for string formatting, which is similar to Go’s fmt.Printf() and fmt.Sprintf().

  2. The %n format specifier is used for newlines in Java, whereas Go uses \n.

  3. Java doesn’t have a direct equivalent to Go’s %#v for printing a source code representation of a value. We’ve omitted this in the Java version.

  4. For binary representation, we use Integer.toBinaryString() in Java.

  5. Java doesn’t have a direct equivalent to Go’s %q for quoting strings. We’ve omitted this in the Java version.

  6. To print a representation of an object’s memory address in Java, we use %h instead of Go’s %p.

  7. Java uses Formatter class for formatting to other output streams, which is similar to Go’s fmt.Fprintf().

To run this program, save it as StringFormatting.java, compile it with javac StringFormatting.java, and then run it with java StringFormatting. The output will be similar to the Go version, with slight differences due to Java’s specific formatting behavior.