美文网首页
格式化输出

格式化输出

作者: 云烟渐成雨 | 来源:发表于2019-08-22 16:07 被阅读0次

    1.1 printf()

    System.out.printf("Row 3: [%d,%f]\n",x,y);
    

    这段代码运行,首先将x的值插入到%d的位置,然后将y的值插入到%f的位置。这些占位符称作格式修饰符,其不但说明了插入数据的位置,同时还说明了将插入什么类型的变量。

    1.2 System.out.format()

    format()和printf()是等价的。

    public class SimpleFormat {
    
        public static void main(String[] args) {
            int x = 3;
            double y = 3.141592;
            System.out.println("Row 1: [" + x + "," + y + "]");
            System.out.format("Row 2: [%d,%f]\n", x, y);
            System.out.printf("Row 3: [%d,%f]\n",x,y);
        }
    }
    

    运行结果:

    Row 1: [3,3.141592]
    Row 2: [3,3.141592]
    Row 3: [3,3.141592]
    

    1.3 Formatter类

    在Java中,所有新的格式化功能都由java.util.Formatter类处理。

    public class Tom {
        private String name;
    
        private Formatter f;
    
        public Tom(String name, Formatter f) {
            this.name = name;
            this.f = f;
        }
    
        public void move(int x, int y) {
            f.format("%s And Tom is at (%d,%d)\n", name, x, y);
        }
    
        public static void main(String[] args) {
            PrintStream out = System.out;
            Tom jerry = new Tom("Jerry",new Formatter(System.out));
            Tom spike = new Tom("Spike",new Formatter(out));
            jerry.move(0,0);
            spike.move(1,1);
            jerry.move(1,2);
            spike.move(2,1);
        }
    }
    

    运行结果:

    Jerry And Tom is at (0,0)
    Spike And Tom is at (1,1)
    Jerry And Tom is at (1,2)
    Spike And Tom is at (2,1)
    

    所有的jerry输出到System.out,而所有的spike都输出到System.out的一个别名中

    1.4 格式化说明符

    在默认情况下,数据是右对齐,可以通过使用"-"标志来改变对齐方向。通过 .precision 来控制小数部分的显示位数(默认情况下是6位小数),如果位数过多就舍入,过少则位数补0,无法用于整数。

    public class Receipt {
        private double total = 0;
        private Formatter f = new Formatter(System.out);
    
        public void printTitle() {
            f.format("%-10s %5s %10s\n", "Item", "Qty", "Price");
            f.format("%-10s %5s %10s\n", "----", "----", "----");
        }
    
        public void print(String name, int qty, double price) {
            f.format("%-10s %5d %10.2f\n", name, qty, price);
            total += price;
        }
    
        public void printTotal(){
            f.format("%-10s %5s %10s\n", "", "", "----");
            f.format("%-10s %5s %10.2f\n", "total", "", total);
        }
    
        public static void main(String[] args) {
            Receipt r = new Receipt();
            r.printTitle();
            r.print("Beans",1,2.13);
            r.print("Apple",2,3.24);
            r.printTotal();
        }
    }
    

    输出结果:

    Item         Qty      Price
    ----        ----       ----
    Beans          1       2.13
    Apple          2       3.24
                           ----
    total                  5.37
    

    1.5 Formatter转换

    类型转换字符

    d 整数型(十进制)
    c Unicode字符
    b Boolean值
    s String
    f 浮点数(十进制)
    e 浮点数(科学计数)
    x 整数(十六进制)
    h 散列码(十六进制)
    % 字符"%"

    1.6 String.format()

    生成格式化的String对象。

    public class StringFormat {
    
        private String format(String name,int x,int y){
            return String.format("%s is at (%d,%d)",name,x,y);
        }
    
        public static void main(String[] args) {
            StringFormat sf = new StringFormat();
            System.out.println(sf.format("Tom",1,4));
        }
    }
    

    输出结果:

    Tom is at (1,4)
    

    相关文章

      网友评论

          本文标题:格式化输出

          本文链接:https://www.haomeiwen.com/subject/otznsctx.html