分享
 
 
 

J2SE 1.5 中的Formatter 类

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

作者:Jeff Langr

出处:developer.com

Java 1.5 introduces a new class named java.util.Formatter that allows you to do string formatting similar to the printf function in C. It depends heavily on the varargs feature being introduced in 1.5.

System.out.printf

The first way you'll learn to work with the Formatter is not to interact with it directly, but instead to use the new PrintStream method printf. You're probably most familiar with PrintStream from doing System.out.println calls. Here is a simple example of the new printf method:

String initials = "jjl"; String comment = "just because"; System.out.printf("reason: %s (noted by %s)", comment, initials);

The example prints the following output on the console:

reason: just because (noted by jjl)

In the example code, you are passing printf a format string that contains embedded format specifiers. You also pass it a list of arguments, each of which corresponds to a format specifier. There are two format specifiers in the example: %s and %s. The first corresponds to the comment argument, and the second corresponds to the initials argument.

A % in a format string designates the start of a format specifier. The end of a format specifier is triggered by one of many possible characters known as conversions. In the %s format specifier, the lowercase s indicates a String conversion. A string conversion means that Java calls toString on the corresponding argument, and substitutes the result for the format specifier.

String.format

If you only want to obtain a formatted string, but not print it, you can use the static method format on the String class. Here's an example that also demonstrates a few numeric conversions:

int a = 65; String s = String.format("char: %c integral: %d octal: %o hex: %x %n", a, a, a, a);

The %n at the end of the format string indicates a platform-specific line separator. When printed, the String s looks like this:

char: A integral: 65 octal: 101 hex: 41

Numeric conversions also support flags for padding, grouping, justification, and sign.

Note: There are four arguments, each using the reference a. Were you to supply only three, or were one of the arguments an invalid type (for example, a string), the format method would have generated one of a few runtime exceptions. This is unlike C, which ignores any formatting problems.

If you want to use the same argument more than once against a format string, you can use a shortcut:

String s = String.format("char: %c integral:%<d octal: %<o hex: %<x %n", a);

The a reference is specified only once. The less-than sign (<) in a format specifier means that it should use the same argument as the last format specifier.

Dates

Formatter provides an extensive number of date-related conversions. The following code:

String.format("%1$td %1$tb %1$ty", new Date())

produces a string with the value:

26 Feb 04

The 1$ in each format specifier is another way to designate which argument to use. In this example, all three format specifiers target the first argument.

The last part of each format specifier is how you do date conversions?using a two-character sequence starting with a t. The second character indicates the date part to convert. For example, td in the first specifier converts the day of the month.

java.util.Formatter

The Formatter class is at the core of the new formatting capability. It fully supports internationalization by letting you pass a Locale to the constructor; the other formatting methods (e.g. String.format) also allow this.

Formatter also lets you pass an Appendable object. This is a new interface that defines append methods so that the formatter can store its results in a text collector such as a stream object. Sun has modified all relevant Java classes, such as StringBuffer and PrintStream, to implement this interface. Here's how you might use it:

double avogadro = 6.0e23; StringBuffer buffer = new StringBuffer(); Formatter formatter = new Formatter(buffer, Locale.US); formatter.format("avogadro's number: %e %n", avogadro); formatter.format("base of the natural log: %e %n", Math.E); System.out.println(buffer.toString());

The corresponding output:

[pre]avogadro's number: 6.000000e+23

base of the natural log: 2.718282e+00[/pre]

Summary

There are dozens of conversions available in the Formatter class and a few more things that are not covered here. To learn more about formatting, refer to the Java API documentation pages for java.util.Formatter.

Trying It Out

You can download the current beta version of J2SE 1.5 from Sun's Web site.

About the Author

Jeff Langr is a freelance author and the owner of Langr Software Solutions. He is working on a second book on Java and test-driven development entitled Agile Java, due out from Prentice Hall in fall 2004.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有