﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-liubijin-随笔分类-J2SE</title><link>http://www.blogjava.net/liubijin/category/44660.html</link><description /><language>zh-cn</language><lastBuildDate>Wed, 05 May 2010 05:21:46 GMT</lastBuildDate><pubDate>Wed, 05 May 2010 05:21:46 GMT</pubDate><ttl>60</ttl><item><title>Java String.Format</title><link>http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Tue, 04 May 2010 04:09:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/320025.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/320025.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/320025.html</trackback:ping><description><![CDATA[<p><span style="font-size: 10.5pt; mso-bidi-font-size: 12.0pt; mso-ascii-: 1.0pt">JDK1.5中，String类新增了一个很有用的静态方法String.format():<br />
<span style="color: red">format(Locale l, String format, Object... args) 使用指定的语言环境、格式字符串和参数返回一个格式化字符串。<br />
format(String format, Object... args) 使用指定的格式字符串和参数返回一个格式化字符串。</span><br />
<br />
举几个这个方法实用的例子(注释是输出结果)： </span></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">long now = System.currentTimeMillis();<br />
<br />
String s = String.format("%tR", now);&nbsp;&nbsp; // "15:12"</code></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">// Current month/day/year<br />
<br />
Date d = new Date(now);<br />
<br />
s = String.format("%tD", d); &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; // "07/13/04"</code></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">s = String.format("%,d", Integer.MAX_VALUE); // "2,147,483,647"</code></p>
<p style="margin: 1em 1em 0px; font-weight: bold">CODE:</p>
<p><code style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 0.5em; margin: 0px 1em 1em; padding-left: 0.5em; padding-right: 0.5em; display: block; font: 12px/1.8em Courier, monospace; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 0.5em">s = String.format("%05d", 123); &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; // "00123"</code>是不是很方便，让人动心啊？哈哈，还有更多的效果!<br />
<br />
其实format函数有些类似c语言中printf函数，一些格式字符串与 C 类似，但已进行了某些定制，以适应 Java 语言，并且利用了其中一些特性。此方法提供了对布局对齐和排列的支持，以及对数值、字符串和日期/时间数据的常规格式和特定于语言环境的输出的支持。支持诸如 byte、BigDecimal 和 Calendar 等常见 Java 类型。<br />
<br />
产生格式化输出的每个方法都需要格式字符串 和参数列表。格式字符串是一个 String，它可以包含固定文本以及一个或多个嵌入的格式说明符。请考虑以下示例：<br />
<br />
Calendar c = ...;<br />
String s = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);<br />
<br />
格式字符串是 format 方法的第一个参数。它包含三个格式说明符 "%1$tm"、"%1$te" 和 "%1$tY"，它们指出应该如何处理参数以及在文本的什么地方插入它们。格式字符串的其余部分是包括 "Dukes Birthday: " 和其他任何空格或标点符号的固定文本。 参数列表由传递给位于格式字符串之后的方法的所有参数组成。在上述示例中，参数列表的大小为 1，由新对象 Calendar 组成。<br />
<br />
<strong>1.常规类型、字符类型和数值类型的格式说明符的语法如下：</strong>%[argument_index$][flags][width][.precision]conversion<br />
<br />
可选的 <em>argument_index</em> 是一个十进制整数，用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用，第二个参数由 "2$" 引用，依此类推。<br />
可选的 <em>flags</em> 是修改输出格式的字符集。有效标志的集合取决于转换类型。<br />
可选 <em>width</em> 是一个非负十进制整数，表明要向输出中写入的最少字符数。<br />
可选 <em>precision</em> 是一个非负十进制整数，通常用来限制字符数。特定行为取决于转换类型。<br />
所需的 <em>conversion</em> 是一个表明应该如何格式化参数的字符。给定参数的有效转换集合取决于参数的数据类型。<br />
<br />
<strong>2.用来表示日期和时间类型的格式说明符的语法如下:</strong><br />
%[argument_index$][flags][width]conversion<br />
<br />
可选的 <em>argument_index</em>、<em>flags</em> 和 <em>width</em> 的定义同上。<br />
所需的 <em>conversion</em> 是一个由两字符组成的序列。第一个字符是 't' 或 'T'。第二个字符表明所使用的格式。这些字符类似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的字符。 <br />
<br />
<br />
<strong>3.与参数不对应的格式说明符的语法如下：</strong><br />
%[flags][width]conversion<br />
<br />
可选 <em>flags</em> 和 <em>width</em> 的定义同上。<br />
所需的 <em>conversion</em> 是一个表明要在输出中所插内容的字符。 <br />
<br />
<font size="4"><strong>转换</strong></font><br />
转换可分为以下几类：<br />
1. 常规 - 可应用于任何参数类型<br />
2. 字符 - 可应用于表示 Unicode 字符的基本类型：char、Character、byte、Byte、short 和 Short。当 Character.isValidCodePoint(int) 返回 true 时，可将此转换应用于 int 和 Integer 类型<br />
3. 数值<br />
&nbsp;&nbsp; &nbsp;&nbsp; 1. 整数 - 可应用于 Java 的整数类型：byte、Byte、short、Short、int、Integer、long、Long 和 BigInteger<br />
&nbsp;&nbsp; &nbsp;&nbsp; 2. 浮点 - 可用于 Java 的浮点类型：float、Float、double、Double 和 BigDecimal <br />
4. 日期/时间 - 可应用于 Java 的、能够对日期或时间进行编码的类型：long、Long、Calendar 和 Date。<br />
5. 百分比 - 产生字面值 '%' ('\u0025')<br />
6. 行分隔符 - 产生特定于平台的行分隔符<br />
<br />
下表总结了受支持的转换。由大写字符（如 'B'、'H'、'S'、'C'、'X'、'E'、'G'、'A' 和 'T'）表示的转换与由相应的小写字符的转换等同，根据流行的 Locale 规则将结果转换为大写形式除外。后者等同于 String.toUpperCase() 的以下调用.<br />
<br />
</p>
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>转换</td>
            <td>参数类别</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>'b', 'B' </td>
            <td>常规 </td>
            <td>如果参数 <em>arg</em> 为 null，则结果为 "false"。如果 <em>arg</em> 是一个 boolean 值或 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/Boolean.html" target="_blank">Boolean</a>，则结果为 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/lang/String.html#valueOf%28boolean%29" target="_blank">String.valueOf()</a> 返回的字符串。否则结果为 "true"。</td>
        </tr>
        <tr>
            <td>'h', 'H' </td>
            <td>常规 </td>
            <td>如果参数 <em>arg</em> 为 null，则结果为 "null"。否则，结果为调用 Integer.toHexString(arg.hashCode()) 得到的结果。</td>
        </tr>
        <tr>
            <td>'s', 'S' </td>
            <td>常规 </td>
            <td>如果参数 <em>arg</em> 为 null，则结果为 "null"。如果 <em>arg</em> 实现 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/Formattable.html" target="_blank">Formattable</a>，则调用 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/Formattable.html#formatTo%28java.util.Formatter,%20int,%20int,%20int%29" target="_blank">arg.formatTo</a>。否则，结果为调用 arg.toString() 得到的结果。</td>
        </tr>
        <tr>
            <td>'c', 'C' </td>
            <td>字符 </td>
            <td>结果是一个 Unicode 字符</td>
        </tr>
        <tr>
            <td>'d' </td>
            <td>整数 </td>
            <td>结果被格式化为十进制整数</td>
        </tr>
        <tr>
            <td>'o' </td>
            <td>整数 </td>
            <td>结果被格式化为八进制整数</td>
        </tr>
        <tr>
            <td>'x', 'X' </td>
            <td>整数 </td>
            <td>结果被格式化为十六进制整数</td>
        </tr>
        <tr>
            <td>'e', 'E' </td>
            <td>浮点 </td>
            <td>结果被格式化为用计算机科学记数法表示的十进制数</td>
        </tr>
        <tr>
            <td>'f' </td>
            <td>浮点 </td>
            <td>结果被格式化为十进制数</td>
        </tr>
        <tr>
            <td>'g', 'G' </td>
            <td>浮点 </td>
            <td>根据精度和舍入运算后的值，使用计算机科学记数形式或十进制格式对结果进行格式化。</td>
        </tr>
        <tr>
            <td>'a', 'A' </td>
            <td>浮点 </td>
            <td>结果被格式化为带有效位数和指数的十六进制浮点数</td>
        </tr>
        <tr>
            <td>'t', 'T' </td>
            <td>日期/时间 </td>
            <td>日期和时间转换字符的前缀。请参阅<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/util/Formatter.html#dt" target="_blank">日期/时间转换</a>。</td>
        </tr>
        <tr>
            <td>'%' </td>
            <td>百分比 </td>
            <td>结果为字面值 '%' ('\u0025')</td>
        </tr>
        <tr>
            <td>'n' </td>
            <td>行分隔符 </td>
            <td>结果为特定于平台的行分隔符</td>
        </tr>
    </tbody>
</table>
<br />
任何未明确定义为转换的字符都是非法字符，并且都被保留，以供将来扩展使用。<br />
<br />
<font size="4"><strong>日期/时间转换<br />
</strong></font>以下日期和时间转换的后缀字符是为 't' 和 'T' 转换定义的。这些类型相似于但不完全等同于那些由 GNU date 和 POSIX strftime(3c) 定义的类型。提供其他转换类型是为了访问特定于 Java 的功能（如将 'L' 用作秒中的毫秒）。<br />
<br />
以下转换字符用来格式化时间：<br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>'H' </td>
            <td>24 小时制的小时，被格式化为必要时带前导零的两位数，即 00 - 23。</td>
        </tr>
        <tr>
            <td>'I' </td>
            <td>12 小时制的小时，被格式化为必要时带前导零的两位数，即 01 - 12。</td>
        </tr>
        <tr>
            <td>'k' </td>
            <td>24 小时制的小时，即 0 - 23。</td>
        </tr>
        <tr>
            <td>'l' </td>
            <td>12 小时制的小时，即 1 - 12。</td>
        </tr>
        <tr>
            <td>'M' </td>
            <td>小时中的分钟，被格式化为必要时带前导零的两位数，即 00 - 59。</td>
        </tr>
        <tr>
            <td>'S' </td>
            <td>分钟中的秒，被格式化为必要时带前导零的两位数，即 00 - 60 （"60" 是支持闰秒所需的一个特殊值）。</td>
        </tr>
        <tr>
            <td>'L' </td>
            <td>秒中的毫秒，被格式化为必要时带前导零的三位数，即 000 - 999。</td>
        </tr>
        <tr>
            <td>'N' </td>
            <td>秒中的毫微秒，被格式化为必要时带前导零的九位数，即 000000000 - 999999999。</td>
        </tr>
        <tr>
            <td>'p' </td>
            <td>特定于语言环境的 <a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getAmPmStrings%28%29" target="_blank">上午或下午</a> 标记以小写形式表示，例如 "am" 或 "pm"。使用转换前缀 'T' 可以强行将此输出转换为大写形式。</td>
        </tr>
        <tr>
            <td>'z' </td>
            <td>相对于 GMT 的 <a href="http://www.ietf.org/rfc/rfc0822.txt" target="_blank">RFC 822</a> 格式的数字时区偏移量，例如 -0800。</td>
        </tr>
        <tr>
            <td>'Z' </td>
            <td>表示时区缩写形式的字符串。Formatter 的语言环境将取代参数的语言环境（如果有）。</td>
        </tr>
        <tr>
            <td>'s' </td>
            <td>自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的秒数，即 Long.MIN_VALUE/1000 与 Long.MAX_VALUE/1000 之间的差值。</td>
        </tr>
        <tr>
            <td>'Q' </td>
            <td>自协调世界时 (UTC) 1970 年 1 月 1 日 00:00:00 至现在所经过的毫秒数，即 Long.MIN_VALUE 与 Long.MAX_VALUE 之间的差值。</td>
        </tr>
    </tbody>
</table>
<br />
以下转换字符用来格式化日期： <br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>'B' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getMonths%28%29" target="_blank">月份全称</a>，例如 "January" 和 "February"。</td>
        </tr>
        <tr>
            <td>'b' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getShortMonths%28%29" target="_blank">月份简称</a>，例如 "Jan" 和 "Feb"。</td>
        </tr>
        <tr>
            <td>'h' </td>
            <td>与 'b' 相同。</td>
        </tr>
        <tr>
            <td>'A' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getWeekdays%28%29" target="_blank">星期几</a>全称，例如 "Sunday" 和 "Monday"</td>
        </tr>
        <tr>
            <td>'a' </td>
            <td>特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DateFormatSymbols.html#getShortWeekdays%28%29" target="_blank">星期几</a>简称，例如 "Sun" 和 "Mon"</td>
        </tr>
        <tr>
            <td>'C' </td>
            <td>除以 100 的四位数表示的年份，被格式化为必要时带前导零的两位数，即 00 - 99</td>
        </tr>
        <tr>
            <td>'Y' </td>
            <td>年份，被格式化为必要时带前导零的四位数（至少），例如，0092 等于格里高利历的 92 CE。</td>
        </tr>
        <tr>
            <td>'y' </td>
            <td>年份的最后两位数，被格式化为必要时带前导零的两位数，即 00 - 99。</td>
        </tr>
        <tr>
            <td>'j' </td>
            <td>一年中的天数，被格式化为必要时带前导零的三位数，例如，对于格里高利历是 001 - 366。</td>
        </tr>
        <tr>
            <td>'m' </td>
            <td>月份，被格式化为必要时带前导零的两位数，即 01 - 13。</td>
        </tr>
        <tr>
            <td>'d' </td>
            <td>一个月中的天数，被格式化为必要时带前导零两位数，即 01 - 31</td>
        </tr>
        <tr>
            <td>'e' </td>
            <td>一个月中的天数，被格式化为两位数，即 1 - 31。</td>
        </tr>
    </tbody>
</table>
<br />
以下转换字符用于格式化常见的日期/时间组合。 <br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>'R' </td>
            <td>24 小时制的时间，被格式化为 "%tH:%tM"</td>
        </tr>
        <tr>
            <td>'T' </td>
            <td>24 小时制的时间，被格式化为 "%tH:%tM:%tS"。</td>
        </tr>
        <tr>
            <td>'r' </td>
            <td>12 小时制的时间，被格式化为 "%tI:%tM:%tS %Tp"。上午或下午标记 ('%Tp') 的位置可能与语言环境有关。</td>
        </tr>
        <tr>
            <td>'D' </td>
            <td>日期，被格式化为 "%tm/%td/%ty"。</td>
        </tr>
        <tr>
            <td>'F' </td>
            <td><a href="http://www.w3.org/TR/NOTE-datetime" target="_blank">ISO 8601</a> 格式的完整日期，被格式化为 "%tY-%tm-%td"。</td>
        </tr>
        <tr>
            <td>'c' </td>
            <td>日期和时间，被格式化为 "%ta %tb %td %tT %tZ %tY"，例如 "Sun Jul 20 16:17:00 EDT 1969"。</td>
        </tr>
    </tbody>
</table>
<br />
任何未明确定义为转换的字符都是非法字符，并且都被保留，以供将来扩展使用。<br />
<br />
<font size="4"><strong><br />
标志</strong></font><br />
下表总结了受支持的标志。y 表示该标志受指示参数类型支持。 <br />
<br />
<table class="t_table" cellspacing="0" align="center">
    <tbody>
        <tr>
            <td>标志</td>
            <td>常规</td>
            <td>字符</td>
            <td>整数</td>
            <td>浮点</td>
            <td>日期/时间</td>
            <td>说明</td>
        </tr>
        <tr>
            <td>'-'</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y</td>
            <td>结果将是左对齐的。</td>
        </tr>
        <tr>
            <td>'#'</td>
            <td>y1 &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y3 &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果应该使用依赖于转换类型的替换形式</td>
        </tr>
        <tr>
            <td>'+'</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y4 &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果总是包括一个符号</td>
        </tr>
        <tr>
            <td>'&nbsp;&nbsp; '</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y4 &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>对于正值，结果中将包括一个前导空格</td>
        </tr>
        <tr>
            <td>'0'</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>y &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果将用零来填充</td>
        </tr>
        <tr>
            <td>','</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y2 &nbsp;&nbsp;&nbsp;</td>
            <td>y5 &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果将包括特定于语言环境的<a href="http://gceclub.sun.com.cn/Java_Docs/html/zh_CN/api/java/text/DecimalFormatSymbols.html#getGroupingSeparator%28%29" target="_blank">组分隔符</a></td>
        </tr>
        <tr>
            <td>'('</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>y4 &nbsp;&nbsp;&nbsp;</td>
            <td>y5 &nbsp;&nbsp;&nbsp;</td>
            <td>- &nbsp;&nbsp;&nbsp;</td>
            <td>结果将是用圆括号括起来的负数</td>
        </tr>
    </tbody>
</table>
<br />
1 取决于 Formattable 的定义。<br />
<br />
2 只适用于 'd' 转换。<br />
<br />
3 只适用于 'o'、'x' 和 'X' 转换。<br />
<br />
4 对 BigInteger 应用 'd'、'o'、'x' 和 'X' 转换时，或者对 byte 及 Byte、short 及 Short、int 及 Integer、long 及 Long 分别应用 'd' 转换时适用。<br />
<br />
5 只适用于 'e'、'E'、'f'、'g' 和 'G' 转换。<br />
<br />
任何未显式定义为标志的字符都是非法字符，并且都被保留，以供扩展使用。 <br />
<br />
宽度&nbsp;&nbsp; 宽度是将向输出中写入的最少字符数。对于行分隔符转换，不适用宽度，如果提供宽度，则会抛出异常。<br />
精度&nbsp;&nbsp; 对于常规参数类型，精度是将向输出中写入的最多字符数。<br />
对于浮点转换 'e'、'E' 和 'f'，精度是小数点分隔符后的位数。如果转换是 'g' 或 'G'，那么精度是舍入计算后所得数值的所有位数。如果转换是 'a' 或 'A'，则不必指定精度。<br />
对于字符、整数和日期/时间参数类型转换，以及百分比和行分隔符转换，精度是不适用的；如果提供精度，则会抛出异常。<br />
参数索引&nbsp;&nbsp; 参数索引是一个十进制整数，用于表明参数在参数列表中的位置。第一个参数由 "1$" 引用，第二个参数由 "2$" 引用，依此类推。<br />
根据位置引用参数的另一种方法是使用 '&lt;' ('\u003c') 标志，这将会重用以前格式说明符的参数。例如，以下两条语句产生的字符相同：
<p>&nbsp;</p>
<blockquote>Calendar c = ...;<br />
String s1 = String.format("Duke's Birthday: %1$tm %1$te,%1$tY", c);<br />
<br />
String s2 = String.format("Duke's Birthday: %1$tm %&lt;$te,%&lt;$tY", c);<br />
</blockquote>
<img src ="http://www.blogjava.net/liubijin/aggbug/320025.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-05-04 12:09 <a href="http://www.blogjava.net/liubijin/archive/2010/05/04/320025.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Swing可视化开发工具</title><link>http://www.blogjava.net/liubijin/archive/2010/04/18/318639.html</link><dc:creator>無所謂</dc:creator><author>無所謂</author><pubDate>Sun, 18 Apr 2010 02:20:00 GMT</pubDate><guid>http://www.blogjava.net/liubijin/archive/2010/04/18/318639.html</guid><wfw:comment>http://www.blogjava.net/liubijin/comments/318639.html</wfw:comment><comments>http://www.blogjava.net/liubijin/archive/2010/04/18/318639.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liubijin/comments/commentRss/318639.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liubijin/services/trackbacks/318639.html</trackback:ping><description><![CDATA[<p>对于刚接触Swing的开发人员，由于水平所限，需要一个可视化的开发工具，来辅助理解学习和开发。也有时候是工作紧迫，需要可视化工具来提高工作效率，节省宝贵的时间。 </p> <p>在此介绍下，如何可视化开发Swing组件。现在Java主流的两款开发工具NetBeans和Eclipse都提供了可视化的功能。 </p> <p>一、NetBeans <br>这个无需多言，Sun官方推荐的Swing开发工具，自身已经集成了可视化工具。 <br>下载地址： <br><a href="http://www.netbeans.org/downloads/index.html">http://www.netbeans.org/downloads/index.html</a></p> <p>二、Eclipse <br>Eclipse本身不提供可视化功能，需要插件来辅助。 <br>我了解到的，比较常用的插件有两种 <br>1、Visual Editor&nbsp; 简称VE <br>关于安装 请参考 <br><a href="http://wiki.eclipse.org/VE/Installing/Archived">http://wiki.eclipse.org/VE/Installing/Archived</a></p> <p>说明如下: <br>VE Installation <br>Make sure eclipse is close. <br>Go to <a href="http://sourceforge.net/project/showfiles.php?group_id=131065&amp;package_id=154855">http://sourceforge.net/project/showfiles.php?group_id=131065&amp;package_id=154855</a> <br>Click "Visual Editor patched as in bug 202562" <br>Click org.eclipse.visualeditor-1.3.0.200709121813.zip <br>Unpack the .zip file somewhere <br>In that extracted folder, there is an " org.eclipse.visualeditor-1.3.0.200709121813" subdir, copy what's in that directory to your eclipse installation dir, say yes if prompted to overwrite. <br>Open eclipse again and go to Window-&gt;Preferences-&gt;Java. If after expanding 'Java' you see Visual Editor at the bottom, then you are good to go. </p> <p>下载地址 <br><a href="http://sourceforge.net/projects/easyeclipse/files/Various%20Patches/Visual%20Editor%20patched%20as%20in%20bug%20202562/org.eclipse.visualeditor-1.3.0.200709121813-2.zip/download">http://sourceforge.net/projects/easyeclipse/files/Various%20Patches/Visual%20Editor%20patched%20as%20in%20bug%20202562/org.eclipse.visualeditor-1.3.0.200709121813-2.zip/download</a></p> <p>2、jigloo <br>这个以前用过，感觉还可以。 <br>官方网站是 <br><a href="http://cloudgarden.com/jigloo/">http://cloudgarden.com/jigloo/</a></p> <p>下载网址 <br><a href="http://cloudgarden.com/jigloo/dnld_redirect.html">http://cloudgarden.com/jigloo/dnld_redirect.html</a></p> <p>安装说明 <br>Please note: if you have installed 4.0 RC1 or RC2 you will need to delete these folders from the plugins and features folders in eclipse before installing version 4.0. <br>Alternatively, you can download the zip file from here. Unzip it into the eclipse folder so that the structure is eclipse/plugins/com.cloudgarden.jigloo_4.0.0 </p> <p>安装都很简单，建议使用link的方式来安装Eclipse插件，方便插件管理，如下所示: <br>解压yourplugin.zip到任意目录下，比如D:\eclipseplugins\yourplugin。 <br>在Eclipse的目录下有个links文件夹，在里面新建文件，命名为anyname.link，编辑此文件，加入如下内容并保存。path = D:/eclipseplugins/yourplugin <br>详细使用，请自行搜索。 </p> <p>其它还有 </p> <p>jformdesigner </p> <p>官方网址：<a href="http://www.jformdesigner.com/">http://www.jformdesigner.com/</a></p> <p>Visual Swing Designer for Eclipse </p> <p>开源网址： <a href="http://code.google.com/p/visualswing4eclipse/">http://code.google.com/p/visualswing4eclipse/</a></p> <p>WindowBuilder </p> <p>官方网址：<a href="http://www.instantiations.com/windowbuilder/">http://www.instantiations.com/windowbuilder/</a></p> <p>附 <br>使用可视化工具拖拽编写Swing程序，一定要注意变量名和代码的可读性，否则代码非常让人崩溃。 </p> <p>本文来自CSDN博客，转载请标明出处：http://blog.csdn.net/liubijin/archive/2010/03/29/5429713.aspx</p><img src ="http://www.blogjava.net/liubijin/aggbug/318639.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liubijin/" target="_blank">無所謂</a> 2010-04-18 10:20 <a href="http://www.blogjava.net/liubijin/archive/2010/04/18/318639.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>