import java.util.Calendar;
import java.util.Date;
import java.util.Formatter;
import java.util.GregorianCalendar;

public class FormatBasic {
    public static void main(String... p) {
        Formatter f = new Formatter();

        f.format("String");
        f.format("String %20% %n");
        f.format("%% %s", "str");
        f.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d");
        f.format("e = %+10.4f", Math.E);
        f.format("Amount gained or lost since last statement: $ %(,.2f", -6217.58);
        f.format("Local time: %tT", Calendar.getInstance());
        f.format("Unable to open file '%1$s': %2$s", "food", "No such file or directory");
        f.format(
                "Duke's Birthday: %1$tm %1$te,%1$tY",
                new GregorianCalendar(1995, Calendar.MAY, 23));
        f.format("Duke's Birthday: %tm %<te,%<tY", new Date());
        f.format("Duke's Birthday: %2$tm %<te,%<tY (it's the %dth)", 123, new Date());

        String s = "%+s%";
        // :: error: (format.string.invalid)
        f.format(s, "illegal");
        // :: error: (format.string.invalid)
        f.format("%+s%", "illegal");
        // :: error: (format.string.invalid)
        f.format("Wrong < indexing: %1$tm %<te,%<$tY", new Date());
        // :: error: (format.string.invalid)
        f.format("%t", new Date());
        // :: error: (argument.type.incompatible)
        f.format("%Td", (int) 231);

        f.close();
    }
}
