formatter java_Java笔记 - Java中的格式化输出,Formatter类的介绍
本文主要内容
1、System.out.format()格式化方法的介绍();
2、Formatter类的介绍和使用:初始化需要传入用于输出的介质,如System.out;
3、格式化说明符:format字符串格式化参数语法和使用例子;
4、String.format()的介绍,内部也是基于Formatter的;
5、使用提示:如果只需要使用format()方法一次,String.format()方法使用起来会很方便。
我们知道C语言中有printf()这样的格式化函数,类似这样的:
printf("data: [%d %f]\n", x, y);
1、Java中也提供了类似的格式化方法:System.out.format();
Java SE5引入的format方法可以用于PrintStream或PrintWriter对象(这里不介绍了),其中也包括System.out,下面就是一个使用例子:
int x = 1;
double y = 3.1415926;
System.out.format("data: [%d %f]\n", x, y);
得到如下结果:
data: [1 3.141593]
2、Formatter类:
在Java中所有新的格式化功能都由java.util.Formatter类处理。可将Formatter看做一个翻译器,将你的字符串翻译成需要的结果。
构造Formatter的时候,需要向其构造器传递一些信息,告诉最终的结果将向哪里输出:
public class Message{
private String username;
private Formatter f;
public Message(String username, Formatter f){
this.username = username;
this.f = f;
}
public void publishMsg(int hour, int minute){
f.format("%s says it is %d:%d\n", username, hour, minute);
}
public static void main(String[] args){
Message msg1 = new Message("Jason",
new Formatter(System.out)); // 传入System.out,信息输出到此
msg1.publishMsg(10, 12);
Message msg2 = new Message("Jason",
new Formatter(System.err)); // 当然,也可以传入System.err
msg2.publishMsg(10, 13);
}
}
得到如下结果:
Jason says it is 10:12
Jason says it is 10:13
上例是向Formatter传入了PrintStream,Formatter的构造器经过重载可以接受多种输出目的地,如OutputStream和File(这里不作介绍)。
格式化说明符:
format字符串的格式化参数语法如下:
%[argument_index$][flags][width][.precision]conversion
argument_index$:argument_index 是一个十进制整数,用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用,第二个参数由 "2$" 引用,依此类推。
flags:可选 flags 是修改输出格式的字符集。有效标志集取决于转换类型。
width:控制一个域的最小值,默认情况下下是右对齐的,可以通过使用“-”标志来改变对其方向。
precision:精度,用于String时,表示输出字符的最大数量,用于浮点数时,表示小数部分要显示出来的 位数(默认是6位),多则舍入,少则补0,用于整数会触发异常。
conversion:转换格式,可选的格式有:
d 整数型(十进制) c Unicode字符 b Boolean值 s String f 浮点数(十进制) e 浮点数(科学计数) x 整数(十六进制) h 散列码 % 字符串“%”
注意当使用b作为转换格式时,即Boolean,对于boolean基本类型或者Boolean对象,其转换结果是对应的true或false。但是对于其他类型的参数,只要该参数不为null,那么该转换的结果就永远都是true。0也会转换为true的,跟其他语言有所区别。所以将b运用于非布尔类型要注意。
下面是一个使用例子:
public class TableData {
// 格式化说明符的使用例子
private Formatter f = new Formatter(System.out);
public void printHead(){
f.format("%-10s %5s %5s\\n", "username", "level", "score");
f.format("%-10s %5s %5s\\n", "---", "---", "---");
}
public void printData(){
f.format("%-10s %5d %5.2f\\n", "Jason", 1, 9.87654321);
f.format("%-10s %5d %5.2f\\n", "arthinking", 2, 9.6512);
}
public static void main(String[] args){
TableData tb = new TableData();
tb.printHead();
tb.printData();
}
}
输出如下内容:
username level score
--- --- ---
Jason 1 9.88
arthinking 2 9.65
下面的boolean转换都输出为true:
Formatter f = new Formatter(System.out);
f.format("boolean %b: ", "false");
f.format("boolean %b: ", 0);
3、String.format();
String.format()的内部,也是创建了一个Formatter对象,然后将你传入的参数转给该Formatter。是一个static方法,接受的参数和Formatter.format()一样,但是返回了一个String对象,如果你只需要使用format()方法一次时,String.format()方法使用起来很方便。
String formatStr = String.format("%#4X", 12);
System.out.println(formatStr);
上面的输出为:
0XC
4表示域的长度,#是flags,具体参考这里:
标志
下表总结了受支持的标志。y 表示该标志受指示参数类型支持。
标志
常规
字符
整数
浮点
日期/时间
说明
'-'
y
y
y
y
y
结果将是左对齐的。
'#'
y1
y3
y
结果应该使用依赖于转换类型的替换形式
'+'
y4
y
结果总是包括一个符号
' '
y4
y
对于正值,结果中将包括一个前导空格
'0'
y
y
结果将用零来填充
','
y2
y5
结果将包括特定于语言环境的[组分隔符](file:///C:/Users/arthinking/AppData/Local/youdao/ynote/java/text/DecimalFormatSymbols.html#getGroupingSeparator())
'('
y4
y5
结果将是用圆括号括起来的负数
1 取决于 [Formattable](file:///C:/Users/arthinking/AppData/Local/youdao/ynote/java/util/Formattable.html "java.util 中的接口") 的定义。 2 只适用于 'd' 转换。 3 只适用于 'o'、'x' 和 'X' 转换。 4 对 [BigInteger](file:///C:/Users/arthinking/AppData/Local/youdao/ynote/java/math/BigInteger.html "java.math 中的类") 应用 'd'、'o'、'x' 和 'X' 转换时,或者对 byte 及 [Byte](file:///C:/Users/arthinking/AppData/Local/youdao/ynote/java/lang/Byte.html "java.lang 中的类")、short 及 [Short](file:///C:/Users/arthinking/AppData/Local/youdao/ynote/java/lang/Short.html "java.lang 中的类")、int 及 [Integer](file:///C:/Users/arthinking/AppData/Local/youdao/ynote/java/lang/Integer.html "java.lang 中的类")、long 及 [Long](file:///C:/Users/arthinking/AppData/Local/youdao/ynote/java/lang/Long.html "java.lang 中的类") 分别应用 'd' 转换时适用。 5 只适用于 'e'、'E'、'f'、'g' 和 'G' 转换。 任何未显式定义为标志的字符都是非法字符,并且都被保留,以供扩展使用。
更多说明参考JDK文档。
formatter java_Java笔记 - Java中的格式化输出,Formatter类的介绍相关推荐
- java 格式化输出 对齐_Java中中英文对齐输出问题,以及Java中的格式化输出
一 中英文对齐输出问题 问题,要求控制台输出如下: abcefg def 森林 阿狗 其实就是要求对齐输出,各种查找java的格式化输出,然后发现只要一个简单的"\t"就可以实现 ...
- bigint对应java什么类型_「JAVA」从格式化输出到扫描输入,深究Java正则表达式匹配之道
字符串是不可变的 字符串是不可变的,也就是说当字符串的内容发生改变的时候,会创建一个新的String对象:但是如果内容没有发生改变的时候,String类的方法会返回原字符串对象的引用. 而正则表达式往 ...
- java 输出格式_java格式化输出方法
##Java中实现格式化输出的几种方式: 1.System.out.printf(); 类似于c语言的printf方法.如: int x = 55; System.out.format("x ...
- Java中数字格式化
在解决实际问题时,对数字的处理是非常普遍的,如数学问题.随机问题.商业货币问题.科学计数问题等.为了应对以上问题,Java提供了处理相关问题的类,包括DecimalFormat类(用于格式化数字).M ...
- Java中时间格式化(获取指定时间)
Java中时间格式化(获取指定时间,七天前) 1.通过获取当前系统时间,格式化后转为"yyyy-MM-dd HH:mm:ss"格式并输出: 2.可获取指定时间,如七天前,一年前等, ...
- python中格式化输出是什么意思_python中的格式化输出用法总结
本文实例总结了python中的格式化输出用法.分享给大家供大家参考,具体如下: Python一共有两种格式化输出语法. 一种是类似于C语言printf的方式,称为 Formatting Express ...
- Java中double类型输出小数点后两位
Java中double类型输出小数点后两位 思路 就是在输出的时候使用字符串格式即可. double testNum=1.123456789;System.out.println(String.for ...
- JAVA中同目录下定义类,以及对象的创建与使用,内存图的原理
JAVA中同目录下定义类,以及对象的创建与使用(听课笔记) JAVA中对象的创建与使用(听课笔记) 示例一 同文件目录下,创建了三个类OOTest01,User,Address类,之间的调用 示例二 ...
- java urlencoder,java中的URLEncoder和URLDecoder类
java中的URLEncoder和URLDecoder类 URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法. 为了解 ...
最新文章
- 逸鹏说道:漫漫人生路
- Silverlight实例教程 – Datagrid,Dataform数据验证和ValidationSummary
- CI 扩展 Service
- UA MATH567 高维统计专题3 含L1-norm的凸优化6 Stochastic Gradient Descent简介
- 2.1.2 进程的状态与转换
- AI+遥感智能解译,赋能智慧城市规划革新(人工智能案例)
- Qt工作笔记-对QImage的进一步认识(关于α通道)
- 《孙子兵法》【火攻第十二】
- java8 gc配置_基于JDK8的JVM参数设置和GC日志解读
- 计算机窗口跳转列表,别小看它!Windows跳转列表效率高
- AI打《星际》被人类碾压?不,事情并没有这么简单
- Apache无法加载PHP模块的解决方案
- numpy中array的维度之-------一维向量和一维数组的区别。
- 看大神如何玩转微信小程序日历插件?
- 可扩展标记语言用户界面语言--XUL的定义及标签(详细)
- 证件照修改宽高和体积的工具
- Visio画UML用例图
- android 代码设置 键盘适应_MTK6577+Android之按键(key)修改
- 使用showdown.js将Markdown文档转换为HTML
- 用HTML+CSS做一个简单好看的环保网页