在JavaSe5中,推出了C语言中printf()风格的格式化输出。这不仅使得控制输出的代码更加简单,同时也给与Java开发者对于输出格式与排列更大的控制能力。今天,我们开始学习Java中的格式化输出。

System.out.format()

由于内容比较简单,我们通过实例来加以说明。项目结构如下:

aaarticlea/png;base64,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" alt="" />

Java Se5引入的format方法可用于PrintStream或PrintWriter对象,其中也包括System.out对象。

package com.tomhu.format;

public class FormatTest1 {

    public static void main(String[] args) {
int x = 5;
double y = 3.141592; // 一般方式
System.out.println("x = " + x + ", y = " + y);
// printf()方式
System.out.printf("x = %d, y = %f\n", x, y);
// format()方式
System.out.format("x = %d, y = %f\n", x, y);
}
}

输出的结果如下:

x = 5, y = 3.141592
x = 5, y = 3.141592
x = 5, y = 3.141592

可以看到,format与printf是等价的,它们只需要一个简单的格式化字符串,加上一串参数即可,每个参数对应一个格式修饰符。

public PrintStream printf(String format, Object ... args) {
return format(format, args);
}

在format的具体代码中,其实就是调用Formatter的format方法:formatter.format(Locale.getDefault(), format, args);

public PrintStream format(String format, Object ... args) {
try {
synchronized (this) {
ensureOpen();
if ((formatter == null)
|| (formatter.locale() != Locale.getDefault()))
formatter = new Formatter((Appendable) this);
formatter.format(Locale.getDefault(), format, args);
}
} catch (InterruptedIOException x) {
Thread.currentThread().interrupt();
} catch (IOException x) {
trouble = true;
}
return this;
}

Formatter类

在Java中,所有新的格式化功能都由Formatter类处理,上述的printf与format也是。可以将Formatter看作是一个翻译器,它将你的格式化字符串与数据翻译成需要的结果。当你创建一个Formatter对象的时候 ,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出

package com.tomhu.format;

import java.util.Formatter;

public class FormatTest2 {

    public static void main(String[] args) {
String name = "huhx";
int age = 22; Formatter formatter = new Formatter(System.out);
formatter.format("My name is %s, and my age is %d ", name, age);
formatter.close();
}
}

它的输出结果如下:

My name is huhx, and my age is 22 

格式化说明符

在插入数据时,如果想要控制空格与对齐,就需要精细复杂的格式修饰符,以下是其抽象的语法:

%[argument_index$][flags][width][.precision]conversion

The optional argument_index is a decimal integer indicating the position of the argument in the argument list. The first argument is referenced by "1$", the second by "2$", etc.

The optional flags is a set of characters that modify the output format. The set of valid flags depends on the conversion.

The optional width is a non-negative decimal integer indicating the minimum number of characters to be written to the output.

The optional precision is a non-negative decimal integer usually used to restrict the number of characters. The specific behavior depends on the conversion.

The required conversion is a character indicating how the argument should be formatted. The set of valid conversions for a given argument depends on the argument's data type.

最常见的应用是控制一个域的最小尺寸,这可以通过指定width来实现。Formatter对象通过在必要时添加空格,来确保一个域至少达到某个长度。在默认的情况下,数据是右对齐的,通过"-"标志可以改变对齐的方向。

与width相对的是precision(精确度),它用来指明最大尺寸。width可以应用各种类型的数据转换,并且其行为方式都一样。precision则不一样,不是所有类型的数据都能使用precision,而且,应用于不同的类型的数据转换时,precision的意义也不同。

  • precision应用于String时,它表示打印String时输出字符的最大数量
  • precision应用于浮点数时,它表示小数点要显示出来的位数。默认是6位小数,如果小数位数过多则舍入,过少则在尾部补零。
  • 由于整数没有小数部分,所以precision不能应用于整数。如果你对整数应用precision,则会触发异常
package com.tomhu.format;

import java.util.Formatter;

public class FormatTest3 {
static Formatter formatter = new Formatter(System.out); public static void printTitle() {
formatter.format("%-15s %-5s %-10s\n", "huhx", "linux", "liuli");
formatter.format("%-15s %-5s %-10s\n", "zhangkun", "yanzi", "zhangcong");
formatter.format("%-15s %-5s %-10s\n", "zhangkun", "yanzhou", "zhangcong");
} public static void print() {
formatter.format("%-15s %5d %10.2f\n", "My name is huhx", 5, 4.2);
formatter.format("%-15.4s %5d %10.2f\n", "My name is huhx", 5, 4.1);
} public static void main(String[] args) {
printTitle();
System.out.println("----------------------------");
print();
formatter.close();
}
}

它的输出结果如下:

huhx            linux liuli
zhangkun yanzi zhangcong
zhangkun yanzhou zhangcong
----------------------------
My name is huhx 5 4.20
My n 5 4.10

Formatter转换

下面的表格包含了最常用的类型转换:

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

String.format()是一个static方法,它接受与Formatter.format()方法一样的参数,但返回一个String对象。当你只需要用format方法一次的时候,String.format()还是很方便的。

package com.tomhu.format;

public class FormatTest4 {

    public static void main(String[] args) {
int age = 22;
String name = "huhx"; String info = String.format("My name is %s and my age is %d", name, age);
System.out.println(info);
}
}

它的输出结果如下:

My name is huhx and my age is 22

其实String.format方法的实质还是Formatter.format(),只不过是做了简单封装而已:

public static String format(String format, Object... args) {
return new Formatter().format(format, args).toString();
}

简单的十六进制转换工具

package com.tomhu.format;

public class FormatTest5 {

    public static String format(byte[] data) {
StringBuilder builder = new StringBuilder();
int n = 0;
for(byte b: data) {
if (n %16 == 0) {
builder.append(String.format("%05x: ", n));
}
builder.append(String.format("%02x ", b));
n ++;
if (n % 16 == 0) {
builder.append("\n");
}
}
builder.append("\n");
return builder.toString();
} public static void main(String[] args) {
String string = "my name is huhx, welcome to my blog";
System.out.println(format(string.getBytes()));
}
}

输出结果如下:

00000: 6d 79 20 6e 61 6d 65 20 69 73 20 68 75 68 78 2c
00010: 20 77 65 6c 63 6f 6d 65 20 74 6f 20 6d 79 20 62
00020: 6c 6f 67

友情链接

作者: huhx 
出处: www.cnblogs.com/huhx
格言:你尽力了,才有资格说自己的运气不好。
版权:本文版权归作者huhx和博客园共有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

 

java基础---->Java的格式化输出的更多相关文章

  1. Java中数字的格式化输出

    Java中数字的格式化输出 double d = 345.678; String s = "hello!"; int i = 1234; //"%"表示进行格式 ...

  2. java基础---->java中正则表达式二

    跟正则表达式相关的类有:Pattern.Matcher和String.今天我们就开始Java中正则表达式的学习. Pattern和Matcher的理解 一.正则表达式的使用方法 一般推荐使用的方式如下 ...

  3. Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock)

    Java基础-Java中的并法库之重入读写锁(ReentrantReadWriteLock) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 在学习Java的之前,你可能已经听说过读 ...

  4. Java基础-Java中23种设计模式之常用的设计模式

    Java基础-Java中23种设计模式之常用的设计模式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.设计模式分类 设计模式是针对特定场景给出的专家级的解决方案.总的来说设 ...

  5. Java基础-Java中的堆内存和离堆内存机制

    Java基础-Java中的堆内存和离堆内存机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  6. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二.

  7. Java基础-Java中的并法库之线程池技术

    Java基础-Java中的并法库之线程池技术 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是线程池技术 二.

  8. Java基础-JAVA中常见的数据结构介绍

    Java基础-JAVA中常见的数据结构介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是数据结构 答:数据结构是指数据存储的组织方式.大致上分为线性表.栈(Stack) ...

  9. Java基础-Java数据类型

    Java基础-Java数据类型 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.数据类型的作用 数据类型就是一组值,以及这一组值上的操作,数据类型可以决定数据的存储方式,取值范围 ...

随机推荐

  1. vue-cli使用sockjs即时通信

    基于webSocket通信的库主要有 socket.io,SockJS,这次用的是 SockJS. 这里我们使用sockjs-client.stomjs这两个模块,要实现webSocket通信,需要后 ...

  2. Mockito-简单使用使用

    参考案例:(本位使用markdown编写) git.oschina实例:https://gitee.com/lhhTestTool/LhhMockito # LhhMockitomock 单元测试 M ...

  3. 简单几步即可判断Linux系统有无被DDOS攻击的方法

    一般来说,服务器非常慢可能原因是多方面的,有可能是配置错误,脚本错误或者是一些奇诡的硬件.当然也有可能是有人对你的服务器进行 Dos (拒绝服务攻击)或者 DDOS (分布式拒绝服务攻击). Dos攻 ...

  4. 【MySQL】解决You can't specify target table 'user_cut_record_0413' for update in FROM clause

    问题 You can't specify target table 'user_cut_record_0413' for update in FROM clause 原因 待更新/删除的数据集与查询的 ...

  5. 每天一个linux命令(11):nl命令

    1.命令简介 nl (Number of Lines) 将指定的文件添加行号标注后写到标准输出.如果不指定文件或指定文件为"-" ,程序将从标准输入读取数据. 2.用法 nl [选 ...

  6. vs2017 打开附带的localdb v13

    查看自己本机装了哪些版本的localdb 打开数据库资源管理器   添加数据库连接     选择要连接的localdb版本,这里选择的是v13版本      添加数据库   新建一个test数据库   ...

  7. 最新的Delphi版本号对照

    The CompilerVersion constant identifies the internal version number of the Delphi compiler. It is de ...

  8. 日志分析工具 Log Parser

    微软的Log Parser, 下载地址 https://www.microsoft.com/en-us/download/details.aspx?id=24659 支持多种文件格式的分析,输入输出, ...

  9. Android Studio集成到Genymotion模拟器

    环境:Mac Android Studio 一.下载Android Studio 下载地址:http://www.android-studio.org/ 这个的安装没啥好说的了,基本的. 二.下载Ge ...

  10. Spring Boot系列——7步集成RabbitMQ

    RabbitMQ是一种我们经常使用的消息中间件,通过RabbitMQ可以帮助我们实现异步.削峰的目的. 今天这篇,我们来看看Spring Boot是如何集成RabbitMQ,发送消息和消费消息的.同时 ...