String Formatting in Logo

import java.util.*;

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 ways to format strings. Here are some examples
        // of common string formatting tasks.

        // In Java, we use the String.format() method or System.out.printf()
        // for formatting. This prints an instance of our Point class.
        Point p = new Point(1, 2);
        System.out.printf("struct1: %s%n", p);

        // In Java, we don't have direct equivalents to Go's %+v or %#v.
        // We can achieve similar results by overriding toString() in our class.
        System.out.printf("struct2: %s%n", p);

        // To print the type of a value, we 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 double-quote strings, we can use %s with quotes in the format string.
        System.out.printf("str2: \"%s\"%n", "string");

        // As with integers seen earlier, we can use String.format() with %x 
        // to render the string in base-16.
        System.out.printf("str3: %s%n", String.format("%x", "hex this"));

        // To print a representation of a pointer, we can use System.identityHashCode().
        System.out.printf("pointer: %d%n", System.identityHashCode(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 Writers other than System.out using PrintWriter or PrintStream.
        System.err.printf("io: an %s%n", "error");
    }
}

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 some differences due to Java’s specific formatting options and object representation.

Note that Java doesn’t have exact equivalents for all of Go’s formatting verbs, but we’ve used similar concepts where possible. For instance, Java doesn’t have a built-in way to print a “Go-like” representation of an object (like Go’s %#v), so we’ve omitted that part. Also, pointer representation in Java is different, so we’ve used System.identityHashCode() as an approximation.