一、java.util.Formatter
java.util.Formatter 是JDK1.5新增的类库,功能很强大,但是不好掌握,就像下棋一样,知道如何走棋子,和熟练应用完全是两码事。
格式化主要用在文本输出方面,比如,数字、日期、金额等,还有类似超市的购物单小票等等,都会用到格式化输出的工具。在此类没出现之前,只能通过空格缩进或这个制表符来对单据等格式做一些控制,现在只要掌握java.util.Formatter,一切问题就解决了。
shut!有关这个类javadoc文档太难看懂了,通过猜测、尝试、查看源码、对文档断章取义基本搞明白了,写了下面的例子:
import java.util.Calendar;
import java.util.Formatter;
import java.util.GregorianCalendar;
/**
* Formatter测试
*
* @author leizhimin 2009-7-16 16:31:02
*/
public class TestFormatter {
public static void main(String[] args) {
//%[argument_index$][flags][width][.precision]conversion
Formatter f1 = new Formatter(System.out);
//格式化输出字符串和数字
f1.format("格式化输出:%s %d", "a", 1235);
System.out.println("/n--------");
//日期的格式化
Calendar c = new GregorianCalendar();
f1.format("当前日期:%1$tY-%1$tm-%1$te", c);
System.out.println("/n--------");
//日期的格式化,并将格式化结果存储到一个字符串变量中
String s = String.format("当前日期:%1$tY-%1$tm-%1$te", c);
System.out.println(s);
//2$:取第二个参数
//-: 指定为左对齐,默认右对齐
//5:最大输出宽度为20,不够会补空格,实际若超过则全部输出
//.2:在此表示输出参数2的最大字符数量,如果是浮点数字,则表示小数部分显示的位数
//s :表示输入参数是字符串
f1.format("%2$-5.2s %1$2s", "123", "456");
//将格式化的结果存储到字符串
System.out.println("/n--------");
String fs = String.format("身高体重(%.2f , %d)", 173.2, 65);
System.out.println(fs);
//printf()本质上也是用System.out作为输出目标构造Formatter对象
//调用format方法,并将printf的参数传给format方法而得。
System.out.println("/n--------");
System.out.printf("身高体重(%.2f , %d)", 180.2, 65);
}
}
运行结果:
格式化输出:a 1235
--------
当前日期:2009-07-16
--------
当前日期:2009-07-16
45123
--------
身高体重(173.20 , 65)
--------
身高体重(180.20 , 65)
Process finished with exit code 0
总结:
1、java.util.Formatter功能强大,主要用于自由格式的制定,也可以指定金额、日期等格式。但以使用方便为原则。
2、其他格式化类:
java.text.DateFormatSymbols
java.text.DecimalFormatSymbols
java.text.FieldPosition
java.text.Format
java.text.DateFormat
java.text.SimpleDateFormat
java.text.MessageFormat
java.text.NumberFormat
java.text.ChoiceFormat
java.text.DecimalFormat
3、String.format()、System.out.printf()方法底层也是通过此类方法调用实现的。
4、Calendar类用来表示系统抽象时间,是日期格式化等操作中最重要的一个类,这个类的实例化方式是:
Calendar rightNow = Calendar.getInstance();
并且可以通过下面的方法改变实例所表示的抽象时间:
void setTime(Date date)
使用给定的 Date 设置此 Calendar 的时间。
void setTimeInMillis(long millis)
用给定的 long 值设置此 Calendar 的当前时间值。
有关日期的格式化还比较复杂,不光与现实方式有关,其实还与时区、国家习惯等等有关,因此在处理日期格式化问题上一定要慎重对待,没有理由不用专门的类做处理。
二、java.text.Format
Format 是一个用于格式化语言环境敏感的信息(如日期、消息和数字)的抽象基类。
光从类的层次结构上看,Java对格式的处理也算费了大劲了,但还是不怎么好用。
消息格式化类比较让人郁闷,SUN的API文档看起来好像翻译的有毛病。
import java.text.MessageFormat;
import java.util.Date;
/**
* 消息格式化类的使用
*
* @author leizhimin 2009-7-29 23:09:41
*/
public class TestMsgFormat {
public static void main(String[] args) {
String msg = "欢迎光临,当前({0})等待的业务受理的顾客有{1}位,请排号办理业务!";
MessageFormat mf = new MessageFormat(msg);
String fmsg = mf.format(new Object[]{new Date(), 35});
System.out.println(fmsg);
}
}
欢迎光临,当前(09-7-29 下午11:17)等待的业务受理的顾客有35位,请排号办理业务!
Process finished with exit code 0
注意,这个参数索引时{0}到{9}的非负整数,多了不认!
分享到:
相关推荐
1. java.util.concurrent - Java 并发工具包 2. 阻塞队列 BlockingQueue 3. 数组阻塞队列 ArrayBlockingQueue 4. 延迟队列 DelayQueue 5. 链阻塞队列 LinkedBlockingQueue 6. 具有优先级的阻塞队列 ...
java.util.ConcurrentModificationException 异常问题详解1
详细介绍了java.util.logging.Logger的用法和结构,对如果扩展Logger起到抛砖引玉的作用!尊重劳动成果,亲下载了要给个评价!
本文通过对数据压缩算法的简要介绍,然后以详细的示例演示了利用java.util.zip包实现数据的压缩与解压,并扩展到在网络传输方面如何应用java.util.zip包现数据压缩与解压
Tomcat内存溢出的解决方法(java.util.concurrent.ExecutionException:java.lang.OutOfMemoryError),内附解决方案!
Exception in thread “main“ java.util.InputMismatchException
java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx
java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1) java.util.concurrent系列文章(1)
java并发工具包 java.util.concurrent中文版-带书签版
详细介绍java.util.Date和java.sql.Date相互转换的多种方法总结,希望对大家有帮助
这是我在编写struts2中遇到的问题,整理出来,包括截图,希望可以帮到大家
java.util包
世界范围内的时区列表。由 java.util.TimeZone 类导出
java.util包源码,pdf版,方便打印
使用java.util.timer实现的简单定时任务,在实现简单一次性定时任务时,使用java.util.timer非常的简单易用,适合没有接触过quartz的新手急用。
java.util.pdf
java.util包总结,方便大家学习。请多指教。
java.util.concurrent总体概览图。 收取资源分3分。需要的同学可以下载一下。 java.util.concurrent主要包括5个部分executor,colletions,locks,atomic,tools。 该图详细的列举了并发包下面的结构,包含所有接口和...
Java.util包常用接口
Java并发编程工具包java.util.concurrent的UML类结构图 PDF