李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
字符串--格式化输出
Leefs
2019-12-19 AM
3218℃
0条
# 字符串--格式化输出 ### 前言 本篇将讲述《Java编程思想》第13.5节,格式化输出 ### 一、printf() #### 1. 概念 `printf` 叫做简单的格式化字符串。 使用`java.io.PrintStream`的`printf`方法实现C风格的输出 printf 方法的第一个参数为输出的格式,第二个参数是可变长的,表示待输出的数据对象 #### 2. 格式参数 | 参数 | 说明 | | ---- | -------------- | | %c | 单个字符 | | %d | 十进制整数 | | %f | 十进制浮点数 | | %o | 八进制数 | | %s | 字符串 | | %u | 无符号十进制数 | | %x | 十六进制数 | | %% | 输出百分号% | 下面对组成格式说明的各项加以说明: > 1. 1.**%:**表示格式说明的起始符号,不可缺少。 > 2. 2.**-:**有-表示左对齐输出,如省略表示右对齐输出。 > 3. 3.**0:**有0表示指定空位填0,如省略表示指定空位不填。 > 4. 4.**m.n:**m指域宽,即对应的输出项在输出设备上所占的字符数。N指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。 > 5. 5.**l或h:**l对整型指long型,对实型指double型。h用于将整型的格式字符修正为short型。 **代码示例** ```java printf("Row 1:[%d %f]\n",x,y); ``` 代码在运行的时候,首先将x的值插入到%d的位置,然后将y的值插入到%f的位置。这些占位符称作格式修饰符,它们不但说明了插入数据的位置,同时还说明了将插入什么类型的变量,以及如何对其格式化。 > **示例** ```java // "%"表示进行格式化输出, "%"之后的内容为格式的定义。 public class Printf { public static void main(String[] args) { double d = 345.678; String s = "hello World"; int a = 1234567; //浮点型的输出 System.out.printf("%,d",a); //格式化输出数据,每三个数据加上一个, System.out.println(); System.out.printf("%f", d); // 345.678000 System.out.println(); //"9.2"中的9表示输出的长度,2表示小数点后的位数。 345.678位数不够前面不上空格 System.out.printf("%9.3f", d); System.out.println(); System.out.printf("%+9.3f", d); //"+"表示输出的数带正负号 System.out.println(); System.out.printf("%-9.3f", d); //"-"表示输出的数左对齐(默认为右对齐) System.out.println(); System.out.printf("%+-9.3f",d); //"+-"表示输出的数带正负号且左对齐 System.out.println(); //整型的输出 System.out.printf("%d", a); //"d"表示输出十进制整数。 System.out.println(); System.out.printf("%04d", a); //规定为4位,不够左边添加0 System.out.println(); System.out.printf("%d%%", a); //如果想输出百分数,则连续用两个 %% System.out.println(); System.out.printf("%o", a); //"o"表示输出八进制整数。 System.out.println(); System.out.printf("%x", a); //"x"表示输出八进制整数。 //字符串的输出 System.out.println(); System.out.printf("%s%n", s); //输出字符串,其中 %n表示换行 System.out.printf("输出一个浮点数:%.3f,一个整数:%d,一个字符串:%s",d,a,s); //输出多个变量 } } ``` > 运行结果 ```java 1,234,567 345.678000 345.678 +345.678 345.678 +345.678 1234567 1234567 1234567% 4553207 12d687 hello World 输出一个浮点数:345.678,一个整数:1234567,一个字符串:hello World ``` ### 二、`System.out.format()` #### 概念 format()方法模仿自C的printf(). 其中,format()与printf()是等价的,它们只需要一个简单的格式化字符串,加上一串参数即可,每个参数对应一个格式修饰符。 **代码示例** ```java System.out.format("%24s: %s%n", "fefe","fwefrr"); ``` `%24s:`表示输出24个空格,s为替换的字符串 `%s:`表示字符串,即替换的内容 `%n:`表示换行 > **示例** ```java public class Format { public static void main(String[] args) { System.out.format("%-15s %5s %10s\n","item","qty","price"); System.out.format("%-15s %5s %10s\n","----","---","-----"); System.out.format("%-15.15s %5d %10.2f\n","lalala",4,4.25); } } ``` > 运行结果 ```java item qty price ---- --- ----- lalala 4 4.25 ``` ### 三、Formatter类 #### 概念 在Java中,所有新的格式化功能都由java.util.Formatter类处理。 可以将Formatter看作是一个翻译器,它将你的格式字符串与数据翻译成需要结果。 当你创建一个Formatter对象的时候,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出。 > 代码示例 ```java 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",new Formatter(System.out)); Turtle terry = new Turtle("Terry",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); } } ``` > 运行结果 ```java 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) ``` Formatter的构造器经过重载可以接受多种输出目的地,不过最常用的还是PrintStream·、OutputStream和File。 ### 四、格式化说明符 #### 基本语法 ```java %[argument_index$][flags][width][.precision]conversion ``` > + flags:对齐方式,默认右对齐,想要左对齐的话,添加`-`。 > + width:最小尺寸,不够时会添加空格。 > + precision:最大尺寸,用于String时,表示打印String输出字符的最大数量;用于浮点数时,表示小数部分要显示的位数(默认是6位),多则舍入,少则补齐;整数没有小数部分,所以precision用于整数会引发异常。 **代码示例** ```java public class Receipt { private double total=0; private Formatter f = new Formatter(System.out); public void printTitle(){ f.format("%-15s %5s %10s\n","Item","Qty","Price"); f.format("%-15s %5s %10s\n","----","---","------"); } public void print(String name,int qty,double price){ f.format("%-15.15s %5d %10.2f\n",name,qty,price); total += price; } public void printTotal(){ f.format("%-15s %5s %10.2f\n","Tax","",total*0.06); f.format("%-15s %5s %10s\n","","","--------"); f.format("%-15s %5s %10.2f\n","","Total",total*1.06); } public static void main(String[] args) { Receipt receipt = new Receipt(); receipt.printTitle(); receipt.print("Jack's Magic Beans",4,4.24); receipt.print("Pricess Peas",4,4.09); receipt.print("Tree Bears Porridge",1,14.09); receipt.printTotal(); } } ``` > 运行结果 ```java Item Qty Price ---- --- ------ Jack's Magic Be 4 4.24 Pricess Peas 4 4.09 Tree Bears Porr 1 14.09 Tax 1.35 -------- Total 23.77 ```
标签:
Java
,
Java编程思想
,
JavaSE
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/306.html
上一篇
字符串--String上的操作及练习题
下一篇
【转载】String.format()的使用
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
pytorch
HDFS
Flume
Filter
序列化和反序列化
Yarn
Linux
机器学习
Python
nginx
Thymeleaf
持有对象
人工智能
MyBatis
数据结构和算法
FileBeat
Java阻塞队列
Java
RSA加解密
Map
Hbase
DataWarehouse
SpringCloudAlibaba
JavaWEB项目搭建
Sentinel
Kibana
Ubuntu
Spring
Beego
Nacos
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭