一. 可以之际像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

  • 用"-"标志来改变对齐方向(默认右对齐),添加了"-"表示左对齐
  • argument_index控制输出顺序  当有多个参数要输出时(比如format("s: %2$s %s\n", "sdffads","fds");)输出结果为s: fds sdffads
  • width: 控制一个域的最小尺寸,
  • flags
  • precision(精度): 用来指明最大尺寸,用于String时,它表示打印String时输出字符的最大数量.用于浮点数时,表示小数显示的位数(默认6位),小数过多则舍入,过少则在尾部补零.用于整数时,会出发异常.

  1. public final class Locale extends Object
  2. Locale 对象表示了特定的地理、政治和文化地区
  3. 字段摘要
  4. Locale.CHINA
  5. 用于表示中国常量
  6. Locale.US
  7. 用于表示美国常量
  8. Locale.JAPAN
  9. 用于表示日本常量
  10. 使用方法: String.format(Locale.US,"i = %d, l = %d, f = %f, d = %f",i,l,f,d);

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()

  • String.format()是一个static方法,接受与Formatter.format()方法一样的参数,但返回一个String对象.
  • String.format()内部,它也是创建一个Formatter对象,然后将你传入的参数转给Formatter.
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

*/

 

java 格式化的更多相关文章

  1. JAVA格式化时间日期

    JAVA格式化时间日期 import java.util.Date; import java.text.DateFormat; /** * 格式化时间类 * DateFormat.FULL = 0 * ...

  2. 7.20.01 java格式化输出 printf 例子

    java格式化输出 printf 例子 importjava.util.Date; publicclassPrintf { publicstaticvoidmain(String[] args) { ...

  3. Java格式化时间

    Java格式化时间 将秒或者毫秒值格式化成指定格式的时间 效果图 工具类 工具类里我只列出了一种格式的格式化方式,可以根据自己的需求,修改"yyyy-MM-dd hh:mm:ss" ...

  4. 【转】java格式化输出 printf 例子

    [转]java格式化输出 printf 例子 转自http://www.cnblogs.com/TankMa/archive/2011/08/20/2146913.html#undefined imp ...

  5. java格式化时间到毫秒

    转自:https://blog.csdn.net/iplayvs2008/article/details/41910835 java格式化时间到毫秒: SimpleDateFormat formatt ...

  6. 8.Java格式化输出

    JAVA中字符串输出格式 1.使用format函数 System.out.format("%d  %f",10,10.5); 2.使用Formatter类 构造函数Formatte ...

  7. java 格式化时间

    java.text.DateFormat format1 = new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); form ...

  8. java 格式化日期(DateFormat)

    import java.text.DateFormat; import java.util.Date; /** * 格式化时间类 DateFormat.FULL = 0 * DateFormat.DE ...

  9. Java格式化输出

    Java的格式化输出等同于String.Format,与C有很大的相似,比如 System.out.printf("%8.2f", x);在printf中,可以使用多个参数,例如: ...

  10. java 格式化输出方法

    在javaSE5中推出了printf方法来输出文本到控制台,在java中现在有如下方法可以输出文本: 1.System.out.println(....) //输出并换行 2.System.out.f ...

随机推荐

  1. scrapy 动态IP、随机UA、验证码

    随机UA https://github.com/hellysmile/fake-useragent DOWNLOADER_MIDDLEWARES增加自定义 from fake_useragent im ...

  2. ELK 集群升级操作

    1.配置项变更  2.禁用自动分片 disabled shard allocation curl -XPUT 'localhost:9200/_cluster/settings?pretty' -H ...

  3. .Net并行编程之同步机制

     一:Barrier(屏障同步) 二:spinLock(自旋锁) 信号量  一:CountdownEvent 虽然通过Task.WaitAll()方法也可以达到线程同步的目的. 但是Countdown ...

  4. 基于Redis主从复制读写分离架构的Session共享(Windows Server)

    搭建主从复制 1.安装软件 下载Redis-x64-3.2.100.zip:https://github.com/MicrosoftArchive/redis/releases 第一步:将Redis拷 ...

  5. scapy的安装

    我是安装了sulley,这里安装了pcapy的模块. https://github.com/zlorb/scapy   ----按照此链接的步骤安装 但是在安装pycrypto模块出现了错误. 这里通 ...

  6. JS——取消事件冒泡,实现div的显示与隐藏 event.cancelBubble = true;

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  7. 深度神经网络tricks and tips

    1)data augmentation (augment 增加,aug:to increase 词根,同August(奥古斯特即凯撒大帝,自认为最伟大的帝王,他出生在八月,他以自己的名字命名这个月)同 ...

  8. python安装办法

    先我们来安装python 1.首先进入网站下载:点击打开链接(或自己输入网址https://www.python.org/downloads/),进入之后,选择64位下载. 2.下载完成后如下图所示 ...

  9. Python杀死windows进程

    import os import pandas as pd """ TCP 192.168.1.155:63758 129.211.126.69:4730 ESTABLI ...

  10. k8s系列~mgr的应用

    一  简介:今天咱们大体介绍下 这两者是如何联系的二  概念解析     pod:说下我的理解    1 pod通过yaml文件来封装docker本身+启动形式    2 pod可以运行多个docke ...