語法格式:String.format(%[argument_index$][flags][width][.precision]conversion)
- argument_index,可選,是一個十進制整數,用於表明參數在參數列表中的位置;
- flags,可選,修改輸出格式的字符集;
- width,可選,是一個非負十進制整數,表明要向輸出中寫入的最少字符數;
- precision,可選,是一個非負十進制整數,通常用來限制字符數;
- conversion,必選,是一個表明應該如何格式化參數的字符,
import java.util.Date;
public class StringTest {
/**
* format格式說明符語法:%[argument_index$][flags][width][.precision]conversion
* 參數舉例:
* [argument_index$]: "1$" 第1個參數
* [flags]: "0" , "" 填充字符,數字用"0"或"",字符串用""
* [width]: "10","-10" 最後總寬度10,正數表示在前面添加,負數表示在後面添加。負數的情況一般只在字符串時才用
* [.precision] : ".3" 小數點後保留3位小數,必須是浮點數類型參數才行
* conversion: d 代表整數,f代表浮點數,s代表字符串,類型要匹配才行,否則報錯 還有t轉義的很多字符
*/
public static void main(String[] args) {
//爲了能清楚地表示" ",把結果中的空格換成了"@"
//整數 必須是整數才能轉換
System.out.println(String.format("%010d",123)); //0000000123
System.out.println(String.format("%2$08d", -3123,-5566)); //-0005566
System.out.println(String.format("%1$9d", -31)); //@@@@@@-31
System.out.println(String.format("%1$09d", -31)); //-00000031
//數字分割
System.out.println(String.format("%,d",Integer.MAX_VALUE)); //2,147,483,647
System.out.println(String.format("%,f",Float.MAX_VALUE)); //340,282,346,638,528,860,000,000,000,000,000,000,000.000000
//浮點數 必須是浮點數才能轉換
System.out.println(String.format("%020.3f", 12.3)); //0000000000000012.300
System.out.println(String.format("%1$.2f", 5689.0)); //5689.00
//字符串 和 單字符c
System.out.println(String.format("%-10s", "sss")); //sss@@@@@@@
System.out.println(String.format("%10s", "sss")); //@@@@@@@sss
System.out.println(String.format("%5c", 'v')); //@@@@v
//綜合 日期處理
String s3= String.format("你的生日:%1$tF,現在的時間:%2$tT", new Date(),System.currentTimeMillis());
System.out.println(s3); //你的生日:2015-01-30,現在的時間:22:58:24
//格式化的位置
String str = "I love ni %s, you love me %s"; //當不標明參數時,將按順序替換
String str2 = "I love ni %2$s, you love me %1$s";
System.out.println(String.format(str, "renjunjie","songliyu")); //I love ni renjunjie, you love me songliyu
System.out.println(String.format(str2, "renjunjie","songliyu")); //I love ni songliyu, you love me renjunjie
//數組的操作
Object[] sendData = new Object[4];
sendData[0] = Integer.valueOf(1);
sendData[1] = "172.12.1.2";
sendData[2] = Integer.valueOf(123);
sendData[3] = "testadfaerfa";
String sendDataString = String.format("%d,%s,%d,%s",(Object[]) sendData); //當不標明參數時,將按順序替換
System.out.println(sendDataString); //1,172.12.1.2,123,testadfaerfa
}
}
格式化日期(後綴字符是爲 't' 和 'T' 轉換定義)
String.format("%tY", new Date()) //2011
String.format("%tm", new Date()) //03
String.format("%tF", new Date()) //2011-03-04
String.format("%tR", new Date()) //15:49
String.format("%tT", new Date()) //15:49:34
String.format("%tc", new Date()) //星期五 三月 04 15:49:34 CST 2011
String.format("%tD", new Date()) //03/04/11
String.format("%td", new Date()) //04
以下轉換字符用來格式化日期:
'B' 特定於語言環境的月份全稱,例如 "January" 和 "February"。
'b' 特定於語言環境的月份簡稱,例如 "Jan" 和 "Feb"。
'h' 與 'b' 相同。
'A' 特定於語言環境的星期幾全稱,例如 "Sunday" 和 "Monday"
'a' 特定於語言環境的星期幾簡稱,例如 "Sun" 和 "Mon"
'C' 除以 100 的四位數表示的年份,被格式化爲必要時帶前導零的兩位數,即 00 - 99
'Y' 年份,被格式化爲必要時帶前導零的四位數(至少),例如,0092 等於格里高利曆的 92 CE。
'y' 年份的最後兩位數,被格式化爲必要時帶前導零的兩位數,即 00 - 99。
'j' 一年中的天數,被格式化爲必要時帶前導零的三位數,例如,對於格里高利曆是 001 - 366。
'm' 月份,被格式化爲必要時帶前導零的兩位數,即 01 - 13。
'd' 一個月中的天數,被格式化爲必要時帶前導零兩位數,即 01 - 31
'e' 一個月中的天數,被格式化爲兩位數,即 1 - 31。
以下轉換字符用於格式化常見的日期/時間組合。
'R' 24 小時制的時間,被格式化爲 "%tH:%tM"
'T' 24 小時制的時間,被格式化爲 "%tH:%tM:%tS"。
'r' 12 小時制的時間,被格式化爲 "%tI:%tM:%tS %Tp"。上午或下午標記 ('%Tp') 的位置可能與語言環境有關。
'D' 日期,被格式化爲 "%tm/%td/%ty"。
'F' ISO 8601 格式的完整日期,被格式化爲 "%tY-%tm-%td"。
'c' 日期和時間,被格式化爲 "%ta %tb %td %tT %tZ %tY",例如 "Sun Jul 20 16:17:00 EDT 1969"。