标签:尺寸 多个参数 int base sdff 美国 nts 小数 浮点数
一. 可以之际像c语言一样用System.out.printf()格式化输出
二. System.out.format
1. format()方法模仿自printf(), 可用于PrintStream或PrintWrter对象,其中也包括System.out对象
三.Formatter类
1.在java中所有新的格式化功能都由java.util.Formatter类处理,可以将Formatter看做是一个翻译器,它将你的格式化字符串与数据翻译成需要的结果,formatter的构造器器经过重载可以接受多种输出的目的地
package strings; //: strings/Turtle.java import java.io.*; import java.util.*; public class Turtle { private String name; private Formatter f; public Turtle(String name, Formatter f) { this.name = name; this.f = f; } public void move(int x, int y) { f.format("%s The Turtle is at (%d,%d)\n", name, x, y); } public static void main(String[] args) { PrintStream outAlias = System.out; Turtle tommy = new Turtle("Tommy", //所有的tommy都将输出到System.out new Formatter(System.out)); Turtle terry = new Turtle("Terry", //所有的Terry都将输出到System.out一个别名中, 这种最常用 new Formatter(outAlias)); tommy.move(0,0); terry.move(4,8); tommy.move(3,4); terry.move(2,5); tommy.move(3,3); terry.move(3,3); } } /* Output: Tommy The Turtle is at (0,0) Terry The Turtle is at (4,8) Tommy The Turtle is at (3,4) Terry The Turtle is at (2,5) Tommy The Turtle is at (3,3) Terry The Turtle is at (3,3) *///:~
2. 格式化说明符
Formatter类格式化抽象语法: %[argument_index][flags][width][.precision]conversion
2.如果需要用变量统一控制格式化宽度可以使用下面的方法
package strings; import java.util.*; class Receipt { public static final int ITEM_WIDTH = 15; public static final int QTY_WIDTH = 5; public static final int PRICE_WIDTH = 10; private static final String TITLE_FRMT = "%-" + ITEM_WIDTH + "s %" + QTY_WIDTH + "s %" + PRICE_WIDTH + "s\n"; private static final String ITEM_FRMT = "%-" + ITEM_WIDTH + "." + ITEM_WIDTH + "s %" + QTY_WIDTH + "d %" + PRICE_WIDTH + ".2f\n"; private static final String TOTAL_FRMT = "%-" + ITEM_WIDTH + "s %" + QTY_WIDTH + "s %" + PRICE_WIDTH + ".2f\n"; private double total = 0; Formatter f = new Formatter(System.out, Locale.US); public void printTitle() { f.format(TITLE_FRMT, "Item", "Qty", "Price"); f.format(TITLE_FRMT, "----", "---", "-----"); } public void print(String name, int qty, double price) { f.format(ITEM_FRMT, name, qty, price); total += price; } public void printTotal() { f.format(TOTAL_FRMT, "Tax", "", total * 0.06); f.format(TITLE_FRMT, "", "", "-----"); f.format(TOTAL_FRMT, "Total", "", total * 1.06); } } public class E04_CustomizableReceipt { public static void main(String[] args) { Receipt receipt = new Receipt(); receipt.printTitle(); receipt.print("Jack‘s Magic Beans", 4, 4.25); receipt.print("Princess Peas", 3, 5.1); receipt.print("Three Bears Porridge", 1, 14.29); receipt.printTotal(); } }
四. String.format()
package strings; //: strings/DatabaseException.java public class DatabaseException extends Exception { public DatabaseException(int transactionID, int queryID, String message) { super(String.format("(t%d, q%d) %s", transactionID, queryID, message)); } public static void main(String[] args) { try { throw new DatabaseException(3, 7, "Write failed"); } catch(Exception e) { System.out.println(e); } } } /* Output: DatabaseException: (t3, q7) Write failed *///:~
五. 一个十六进制转储(dump)工具
//: net/mindview/util/Hex.java package object; import java.io.*; public class Hex { public static String format(byte[] data) { StringBuilder result = new StringBuilder(); int n = 0; for(byte b : data) { if(n % 16 == 0) result.append(String.format("%05X: ", n)); result.append(String.format("%02X ", b)); n++; if(n % 16 == 0) result.append("\n"); } result.append("\n"); return result.toString(); } public static void main(String[] args) throws Exception { if(args.length == 0) // Test by displaying this class file: System.out.println( format(BinaryFile.read("bin/object/Hex.class"))); else System.out.println( format(BinaryFile.read(new File(args[0])))); } } /* Output: (Sample) 00000: CA FE BA BE 00 00 00 31 00 52 0A 00 05 00 22 07 00010: 00 23 0A 00 02 00 22 08 00 24 07 00 25 0A 00 26 00020: 00 27 0A 00 28 00 29 0A 00 02 00 2A 08 00 2B 0A 00030: 00 2C 00 2D 08 00 2E 0A 00 02 00 2F 09 00 30 00 00040: 31 08 00 32 0A 00 33 00 34 0A 00 15 00 35 0A 00 00050: 36 00 37 07 00 38 0A 00 12 00 39 0A 00 33 00 3A ... *///:~ //: net/mindview/util/BinaryFile.java // Utility for reading files in binary form. package object; import java.io.*; public class BinaryFile { public static byte[] read(File bFile) throws IOException{ BufferedInputStream bf = new BufferedInputStream( new FileInputStream(bFile)); try { byte[] data = new byte[bf.available()]; bf.read(data); return data; } finally { bf.close(); } } public static byte[] read(String bFile) throws IOException { return read(new File(bFile).getAbsoluteFile()); } } ///:~
六.最全的示例
package strings; import java.math.*; import java.util.*; import static net.mindview.util.Print.*; public class E05_ComplexConversion { public static void main(String[] args) { Formatter f = new Formatter(System.out, Locale.US); char u = ‘a‘; print("u = ‘a‘"); f.format("s: %1$-10s\n", u); f.format("c: %1$-10c\n", u); f.format("b: %1$-10.10b\n", u); f.format("h: %1$-10.10h\n", u); int v = 1000; print("v = 1000"); f.format("d 1: %1$(,0+10d\n", v); f.format("d 2: %1$-(, 10d\n", v); f.format("d 3, v = -v: %1$-(, 10d\n", -v); f.format("c, v = 121: %1$-10c\n", 121); f.format("b: %1$-10.10b\n", v); f.format("s: %1$-10.10s\n", v); f.format("x: %1$-10x\n", v); f.format("h: %1$-10.10h\n", v); BigInteger w = new BigInteger("50000000000000"); print("w = new BigInteger(\"50000000000000\")"); f.format("d 1: %1$(,0+10d\n", w); f.format("d 2: %1$-(, 10d\n", w); f.format("d 3, w = -w: %1$-(, 10d\n", w.negate()); f.format("b: %1$-10.10b\n", w); f.format("s: %1$-10.10s\n", w); f.format("x 1: %1$(0+10x\n", w); f.format("x 2: %1$-( 10x\n", w); f.format("x 3, w = -w: %1$-( 10x\n", w.negate()); f.format("h: %1$-10.10h\n", w); double x = 179.543; print("x = 179.543"); f.format("b: %1$-10.10b\n", x); f.format("s: %1$-10.10s\n", x); f.format("f 1: %1$#(,0+10.2f\n", x); f.format("f 2: %1$#(,- 10.2f\n", x); f.format("f 3, x = -x: %1$#(,0+10.2f\n", -x); f.format("e 1: %1$#(0+10.2e\n", x); f.format("e 2: %1$#(- 10.2e\n", x); f.format("e 3, x = -x: %1$#(0+10.2e\n", -x); f.format("h: %1$-10.10h\n", x); Object y = new Object(); print("y = new Object()"); f.format("b: %1$-10.10b\n", y); f.format("s: %1$-10.10s\n", y); f.format("h: %1$-10.10h\n", y); boolean z = false; print("z = false"); f.format("b: %1$-10.10b\n", z); f.format("s: %1$-10.10s\n", z); f.format("h: %1$-10.10h\n", z); } }/*
u = ‘a‘
s: a
c: a
b: true
h: 61
v = 1000
d 1: +00001,000
d 2: 1,000
d 3, v = -v: (1,000)
c, v = 121: y
b: true
s: 1000
x: 3e8
h: 3e8
w = new BigInteger("50000000000000")
d 1: +50,000,000,000,000
d 2: 50,000,000,000,000
d 3, w = -w: (50,000,000,000,000)
b: true
s: 5000000000
x 1: +2d79883d2000
x 2: 2d79883d2000
x 3, w = -w: (2d79883d2000)
h: 8842a1a7
x = 179.543
b: true
s: 179.543
f 1: +000179.54
f 2: 179.54
f 3, x = -x: (00179.54)
e 1: +01.80e+02
e 2: 1.80e+02
e 3, x = -x: (1.80e+02)
h: 1ef462c
y = new Object()
b: true
s: java.lang.
h: 6d06d69c
z = false
b: false
s: false
h: 4d5
*/
标签:尺寸 多个参数 int base sdff 美国 nts 小数 浮点数
原文地址:https://www.cnblogs.com/jiangfeilong/p/10313731.html