Java 字符串格式化 —— java.util.Formatter

java.util.Formatter是JDK1.5新增的类,支持类似C中的printf风格的字符串格式化工作

Formatter有4个构造方法,如下:

public Formatter()

public Formatter(Appendable a)

public Formatter(Locale l)

public Formatter(Appendable a, Locale l)

构造方法主要用于设置Formatter的缓冲器和Locale,默认的情况下,Formatter使用StringBuilder作为缓冲器,使用Locale.getDefault()作为locale。

Formatter的使用方法如下(摘自JDK DOC):

 StringBuilder sb = new StringBuilder();
 // Send all output to the Appendable object sb
 Formatter formatter = new Formatter(sb, Locale.US);

 // Explicit argument indices may be used to re-order output.
 formatter.format("%4$2s %3$2s %2$2s %1$2s", "a", "b", "c", "d")
 // -> " d  c  b  a"

 // Optional locale as the first argument can be used to get
 // locale-specific formatting of numbers.  The precision and width can be
 // given to round and align the value.
 formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E);
 // -> "e =    +2,7183"

 // The ‘(‘ numeric flag may be used to format negative numbers with
 // parentheses rather than a minus sign.  Group separators are
 // automatically inserted.
 formatter.format("Amount gained or lost since last statement: $ %(,.2f", balanceDelta);
 // -> "Amount gained or lost since last statement: $ (6,217.58)"

例子中,先new一个Formatter对象,然后调用Formatter的format方法,这时Formatter内部的缓冲器就储存了格式化后的字符串,然后可以用toString方法取出。

更为一般的用法是使用String.format,String.format通过Formatter实现字条串格式

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

或者在输出流中使用

System.out.format("Local time: %tT", Calendar.getInstance());

format方法的主要参数分两部分,格式字符串和可变的格式化参数

格式字符串有一套自己的语法,它由固定文本或者格式描述符组成。描述符的格式如下:

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

argument_index 是一个整数,表明使用的参数的位置,例如

System.out.format("%d %d", 1, 2);        // 输出 1 2
System.out.format("%1$d %d", 1, 2);      // 输出 1 1

flags 是一组用于修饰输出的字条

width 是一个非负的整数,用于指定写到绥中的最小长度

precision 是一个非负整数,一般用于指定数字的精度,依赖conversion

conversion 必须有值,用于指定参数如何转换

conversion  主要有以下几组字符(即可以转换的类型)

‘s‘, ‘S‘             要求参数实现了Formattable,然后调用它的formatTo方法得到结果

‘c‘, ‘C‘        字符

‘d‘             十进制整数

‘o‘             八进制整数

‘x‘, ‘X‘        十六进制整数

‘e‘, ‘E‘        科学计数法浮点数

‘f‘             浮点数

‘t‘, ‘T‘        时间日期

flags 主要有以下几种用法

‘-‘                            左对齐

‘#‘                            依赖于conversion,不同的conversion,该flag的含义不一样

‘+‘                            结果带正负号

‘ ‘                             结果带前置空格

‘0‘                            如果结果不满足宽度(width 参数)的要求,用0字符填充

‘,‘                            数字会按locale用逗号分割

‘(‘                            负数结果会被括号括起

更详细的资料可以看JDK文档

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html

时间: 2024-10-29 19:10:01

Java 字符串格式化 —— java.util.Formatter的相关文章

【ThinkingInJava】26、java字符串格式化说明符

/** * 书本:<Thinking In Java> * 功能:对于java字符串格式化说明符 * format字符串的格式化参数语法如下: * %[argument_index$][flags][width][.precision]conversion * 文件:Receipt.java * 时间:2015年4月11日19:40:53 * 作者:cutter_point */ package Lesson13_strings; import java.util.Formatter; pub

JAVA字符串格式化-String.format()的使用(转)

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参

Java字符串格式化String.format常用用法

常规的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参数生

JAVA字符串格式化String.format()的使用

JAVA字符串格式化-String.format()的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object

JAVA字符串格式化-String.format()的使用

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参

Java系列: JAVA字符串格式化-String.format()的使用(zz)

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参

【转】JAVA字符串格式化-String.format()的使用--不错

原文网址:http://blog.csdn.net/lonely_fireworks/article/details/7962171 常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. forma

java字符串格式化性能对比String.format/StringBuilder/+拼接

String.format由于每次都有生成一个Formatter对象,因此速度会比较慢,在大数据量需要格式化处理的时候,避免使用String.format进行格式化,相反使用StringUtils.leftPad,StringUtils.rightPad,然后使用+一次性(注:分为多个独立的+性能会受到较大影响)或者StringBuilder进行拼接能够极大地提升性能.LZ在一个海量数据导出场景中,改写后(其中包括很多BigDecimal及计算)导出格式化性能提升了大约2/3.纯粹的字符串格式化

JAVA字符串格式化-String.format()

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参