String.format()用法

名稱 說明 java

  Format(String, Object)  將指定的 String 中的格式項替換爲指定的 Object 實例的值的文本等效項。 編程

  Format(String, array<>[]()[])  將指定 String 中的格式項替換爲指定數組中相應 Object 實例的值的文本等效項。 數組

  Format(IFormatProvider, String, array<>[]()[])  將指定 String 中的格式項替換爲指定數組中相應 Object 實例的值的文本等效項。指定的參數提供區域性特定的格式設置信息。 編程語言

  Format(String, Object, Object)  將指定的 String 中的格式項替換爲兩個指定的 Object 實例的值的文本等效項。 ide

  Format(String, Object, Object, Object)  將指定的 String 中的格式項替換爲三個指定的 Object 實例的值的文本等效項。函數

 

 

多個參數.net

 

int m[]=new int{a,b,c,d};orm

 

string.format("{0}{1}{2}",m);對象

 

一個參數字符串

 

private const string _extraClause = " AND C_INTERNSHIPORG_INTERNSHIPID = {0}";

 

//將MyCrypt.Decrypt(Request["id"])做爲_extraClause 的參數

if (Request["id"] != null && Request["id"] != string.Empty)

{

    mExtraMessage = string.Format(_extraClause, MyCrypt.Decrypt(Request["id"]));

}

 

二、格式化數值結果表

 

字符 

 說明 

 示例 

 輸出 

 

C 貨幣 string.Format("{0:C3}", 2) $2.000 

D 十進制 string.Format("{0:D3}", 2) 002 

E 科學計數法 1.20E+001 1.20E+001 

G 常規 string.Format("{0:G}", 2) 2 

N 用分號隔開的數字 string.Format("{0:N}", 250000) 250,000.00 

X 十六進制 string.Format("{0:X000}", 12) C

 

 

 string.Format("{0:000.000}", 12.2) 012.200

 

 

string.format用來格式化字符串(按指定的規則鏈接字符串或輸出其餘變量並返回新的字符串) 。

string.format(fm,...);

第一個參數用fm表示輸出的格式,每一個%符號後面是一個格式化表達式,每一個格式化表達式按順序對應後面的參數。

因此用了N個格式化表達式,就必須在後面添加N個參數。

 

下面是一個簡單的例子:

 

int = 123;

str = "字符串"

 

--下面的%s對應參數str, %i對應參數int

str = string.format("這是字符串:'%s' 這是數字值 %i",str,int);

 

win.messageBox(str);

 

--%05i表示格式化爲至少五位的數字,不足在前面補0

str = string.format("%05i",int);

win.messageBox(str);

格式化表達式:%[零個或多個標誌][最小字段寬度][精度][修改符]格式碼

 

注意:[]方括號表示可選參數

 

一、格式碼

 

代碼 c

參數 數字值(number) 

含義 參數被裁剪爲8位字節碼並做爲字符進行打印。

 

代碼 i,d

參數 數字值(number) 

含義 參數做爲一個十進制整數打印。若是給出了精度並且值的位數小於精度位數,前面就用0填充。

 

代碼 u,o,x,X

參數 數字值(number) 

含義 參數做爲一個無符號數字值打印,u使用十進制,o使用八進制,x或X使用十六進制,二者的區別是x約定使用abcdef,而X約定使用ABCDEF。

 

代碼 e,E

參數 數字值(number) 

含義 參數根據指數形式打印。例如,6.023000e23是使用代碼e,6.023000E23是使用代碼E。小數點後面的位數由精度字段決定,缺省值是6。

 

代碼 f

參數 數字值(number) 

含義 參數按照的常規浮點格式打印。精度字段決定小數點後面的位數,缺省值是6。

 

代碼 g,G

參數 數字值(number) 

含義 參數以%f或%e(如G則%E)的格式打印,取決於它的值。若是指數大於等於-4但小於精度字段就使用%f格式,不然使用指數格式。

 

代碼 s

參數 字符串值(string) 

含義 打印一個字符串。

 

代碼 q 

參數 (無)

含義 打印一個字符串,並將字符串置於一對引號中,若是字符串中包含引號換行等自動添加轉義符。若是要讀取一個字符串傳爲腳本代碼。爲避免用戶惡意注入引號等特殊字符,可使用%q進行格式化。

 

代碼 %

參數 (無)

含義 取消%轉義打印一個%字符,即用%%表示原本的%。

 

二、 標誌

 

標誌 -

含義 值在字段中作對齊,缺省狀況下是右對齊。

 

標誌 0

含義 當數值爲右對齊時,缺省狀況下是使用空格填充值左邊未使用的列。這個標誌表示用零填充,它可用於d,i,u,o,x,X,e,E,f,g和G代碼。

使用d,i,u,o,x和X代碼時,若是給出了精度字段,零標誌就被忽略。若是格式代碼中出現了負號,零標誌也沒有效果。

 

標誌 +

含義 當用於一個格式化某個有符號值代碼時,若是值非負,正號標誌就會給它加上一個正號。若是該值爲負,就像往常同樣顯示一個負號。在

缺省狀況下,正號並不會顯示。

 

標誌 空格

含義 只用於轉換有符號值的代碼。當值非負時,這個標誌把一個空格添加到它開始的位置。注意這個標誌和正號標誌是相互排斥的,若是兩個

同時給出,空格標誌便被忽略。

 

標誌 #

含義 選擇某些代碼的另外一種轉換形式:

 

用於... #標誌...

o 保證產生的值以一個零開頭

x,X 在非零值前面加0x前綴(%X則爲0X)

e,E,f 確保結果始終包含一個小數點,即便它後面沒有數字

g,G 和上面的e,E和f代碼相同。另外,綴尾的0並不從小數中去除

 

三、 字段寬度

 

字段寬度是一個十進制整數,用於指定將出如今結果中的最小字符數。若是值的字符數少於字段寬度,就對它進行填充以增長長度。

 

四、 精度

 

精度以一個句點開頭,後面跟一個可選的十進制數。若是未給出整數,精度的缺省值爲零。

 

對於d,i,u,o,x和X類型的轉換,精度字段指定將出如今結果中的最小的數字個數並覆蓋零標誌。若是轉換後的值的位數小於寬度,就在它的前面插入零。若是值爲零且精度也爲零,則轉換結果就不會產生數字。

 

對於e,E和f類型的轉換,精度決定將出如今小數點以後的數字位數。

 

對於g和G類型的轉換,它指定將出如今結果中的最大有效位數。

 

當使用s類型的轉換時,精度指定將被轉換的最多的字符數。

 

若是用於表示字段寬度和/或精度的十進制整數由一個星號代替,那麼printf的下一個參數(必須是個整數)就提供寬度和(或)精度。所以,

這些值能夠經過計算得到而沒必要預先指定。

 

五、示例

 

格式代碼 A ABC ABCDEFGH 

%s A ABC ABCDEFGH 

%5s ####A ##ABC ABCDEFGH 

%.5s A ABC ABCDE 

%5.5s ####A ##ABC ABCDE 

%-5s A#### ABC## ABCDEFGH

 

格式代碼 1 -12 12345 123456789 

%d 1 -12 12345 123456789 

%6d #####1 ###-12 #12345 123456789 

%.4d 0001 -0012 12345 123456789 

%6.4d ##0001 #-0012 #12345 123456789 

%-4d 1#### -12# 12345 123456789 

%04d 0001 -012 12345 123456789 

%+d +1 -12 +12345 +123456789

 

格式代碼 1 .01 .00012345 12345.6789 

%f 1.000000 0.010000 0.000123 12345.678900 

%10.2d ######1.00 #####0.01 ######0.00 ##12345.67 

%e 1.000000e+00 1.000000e-02 1.234500e-04 1.234568e+04 

%.4e 1.0000e+00 1.0000e-02 1.2345e-04 1.2346e+04 

%g 1 0.01 0.00012345 12345.7

 

格式代碼 6.023e23 

%f 60229999999999975882752.000000 

%10.2e 60229999999999975882752.00 

%e 6.023000e+23 

%.4e 6.0230e+23 

%g 6.023e+23

 

用上面的格式化函數能夠輕鬆實現數字的進制轉換

 

--數字轉換爲二進制字符串

str = string.format("%b",23 );

 

--二進制字符串轉換爲數字

n = tonumber(str,2)

 

--數字轉換爲八進制字符串

str = string.format("%o",23 );

 

--八進制字符串轉換爲數字

n = tonumber(str,8)

 

--數字轉換爲十六進制字符串

str = string.format("%x",23 );

 

--十六進制字符串轉換爲數字

n = tonumber(str,16)

 

4、格式化時間

模擬精靈v7.10 格式化時間的函數有 string.time;string.ftime;os.data;os.time 等函數。

os.time 是從table生成數字時間值 string.time是從字符串生成數字時間值。

os.data 與string.ftime功能相同從時間值反過來生成字符串或時間。

 

 

這裏咱們介紹string.time函數、string.ftime函數,下面是使用示例:

 

 

--從字符串建立時間值

t = string.time("2006/6/6 0:0:0","%Y/%m/%d %H:%M:%S")

 

--從時間值建立字符串

str = string.ftime("%Y/%m/%d %H:%M:%S",t )

 

格式化語法(在不少編程語言中都適用的語法)

 

 

%a - 當前區域星期幾的簡寫

%A - 當前區域星期幾的全稱

%b - 當前區域月份的簡寫

%B - 當前區域月份的全稱

%c - 當前區域首選的日期時間表達

%C - 世紀值(年份除以 100 後取整,範圍從 00 到 99)

%d - 月份中的第幾天,十進制數字(範圍從 01 到 31)

%D - 和 %m/%d/%y 同樣

%e - 月份中的第幾天,十進制數字,一位的數字前會加上一個空格(範圍從 ' 1' 到 '31')

%g - 和 %G 同樣,可是沒有世紀

%G - 4 位數的年份,符合 ISO 星期數(參見 %V)。和 %V 的格式和值同樣,只除了若是 ISO 星期數屬於前一年或者後一年,則使用那一年。

%h - 和 %b 同樣

%H - 24 小時制的十進制小時數(範圍從 00 到 23)

%I - 12 小時制的十進制小時數(範圍從 00 到 12)

%j - 年份中的第幾天,十進制數(範圍從 001 到 366)

%m - 十進制月份(範圍從 01 到 12)

%M - 十進制分鐘數

%n - 換行符

%p - 根據給定的時間值爲 `am' 或 `pm',或者當前區域設置中的相應字符串

%r - 用 a.m. 和 p.m. 符號的時間

%R - 24 小時符號的時間

%S - 十進制秒數

%t - 製表符

%T - 當前時間,和 %H:%M:%S 同樣

%u - 星期幾的十進制數表達 [1,7],1 表示星期一

%U - 本年的第幾周,從第一週的第一個星期天做爲第一天開始

%V - 本年第幾周的 ISO 8601:1988 格式,範圍從 01 到 53,第 1 周是本年第一個至少還有 4 天的星期,星期一做爲每週的第一天。(用 %G 或者 %g 做爲指定時間戳相應週數的年份組成。)

%W - 本年的第幾週數,從第一週的第一個星期一做爲第一天開始

%w - 星期中的第幾天,星期天爲 0

%x - 當前區域首選的時間表示法,不包括時間

%X - 當前區域首選的時間表示法,不包括日期

%y - 沒有世紀數的十進制年份(範圍從 00 到 99)

%Y - 包括世紀數的十進制年份

%Z - 時區名或縮寫

%% - 文字上的 `%' 字符

 

 

 

 

import java.util.Date;

import java.util.Locale;

 

import org.junit.Test;

 

public class StringFormat {

 

/*

String.format()用法

 

一、轉換符

%s: 字符串類型,如:"ljq"

%b: 布爾類型,如:true

%d: 整數類型(十進制),如:99

%f: 浮點類型,如:99.99

%%: 百分比類型,如:%

%n: 換行符

 */

@Test

public void test1(){

 String str=null;

    str=String.format("Hi, %s", "林計欽"); // 格式化字符串

    System.out.println(str); // 輸出字符串變量str的內容

    System.out.printf("3>7的結果是:%b %n", 3>7);

    System.out.printf("100的一半是:%d %n", 100/2);

    System.out.printf("50元的書打8.5折扣是:%f 元%n", 50*0.85);

    System.out.printf("上面的折扣是%d%% %n", 85);

}

/*

二、常見日期時間格式化

c: 包括所有日期和時間信息 星期六 十月 27 14:21:20 CST 2007

F: "年-月-日"格式,如:2007-10-27

D: "月/日/年"格式,如:10/27/07

r: "HH:MM:SS PM"格式(12時制),如:02:25:51 下午

T: "HH:MM:SS"格式(24時制),如:14:28:16

R: "HH:MM"格式(24時制),如:14:28

 */

@Test

public void test2(){

    Date date=new Date(); // 建立日期對象

    System.out.printf("所有日期和時間信息:%tc%n", date);//格式化輸出日期或時間

    System.out.printf("年-月-日格式:%tF%n", date);

    System.out.printf("月/日/年格式:%tD%n", date);

    System.out.printf("HH:MM:SS PM格式(12時制):%tr%n", date);

    System.out.printf("HH:MM:SS格式(24時制):%tT%n", date);

    System.out.printf("HH:MM格式(24時制):%tR%n", date);

}

/*

三、格式化日期字符串

b或者h: 月份簡稱,如

中:十月

英:Oct

 

B: 月份全稱,如

中:十月

英:October

  

a: 星期的簡稱,如

中:星期六

英:Sat

  

A: 星期的全稱,如:

中:星期六

英:Saturday

 

C: 年的前兩位數字(不足兩位前面補0),如:20

y: 年的後兩位數字(不足兩位前面補0),如:07

Y: 4位數字的年份(不足4位前面補0),如:2007

j: 一年中的天數(即年的第幾天),如:300 

m: 兩位數字的月份(不足兩位前面補0),如:10

d: 兩位數字的日(不足兩位前面補0),如:27

e: 月份的日(前面不補0),如:5

 */

@Test

public void test3(){

    Date date=new Date();                                                                             // 建立日期對象

    String str=String.format(Locale.US,"英文月份簡稱:%tb",date);      // 格式化日期字符串

    System.out.println(str);                                                                              // 輸出字符串內容

    System.out.printf("本地月份簡稱:%tb%n",date);

    str=String.format(Locale.US,"英文月份全稱:%tB",date);

    System.out.println(str);

    System.out.printf("本地月份全稱:%tB%n",date);

    str=String.format(Locale.US,"英文星期的簡稱:%ta",date);

    System.out.println(str);

    System.out.printf("本地星期的簡稱:%tA%n",date);

    System.out.printf("年的前兩位數字(不足兩位前面補0):%tC%n",date);

    System.out.printf("年的後兩位數字(不足兩位前面補0):%ty%n",date);

    System.out.printf("一年中的天數(即年的第幾天):%tj%n",date);

    System.out.printf("兩位數字的月份(不足兩位前面補0):%tm%n",date);

    System.out.printf("兩位數字的日(不足兩位前面補0):%td%n",date);

    System.out.printf("月份的日(前面不補0):%te",date);

}

/*

四、格式化時間字符串

H: 2位數字24時制的小時(不足2位前面補0),如:15

I: 2位數字12時制的小時(不足2位前面補0),如:03

k: 2位數字24時制的小時(前面不補0),如:15

l: 2位數字12時制的小時(前面不補0),如:3

M: 2位數字的分鐘(不足2位前面補0),如:03

S: 2位數字的秒(不足2位前面補0),如:09

L: 3位數字的毫秒(不足3位前面補0),如:015

N: 9位數字的毫秒數(不足9位前面補0),如:562000000

 

p: 小寫字母的上午或下午標記,如:

中:下午

英:pm

  

z: 相對於GMT的RFC822時區的偏移量,如:+0800

Z: 時區縮寫字符串,如:CST

s: 1970-1-1 00:00:00 到如今所通過的秒數,如:1193468128

Q: 1970-1-1 00:00:00 到如今所通過的毫秒數,如:1193468128984

 

 */

@Test

public void test4(){

    Date date=new Date();                               // 建立日期對象

    System.out.printf("2位數字24時制的小時(不足2位前面補0):%tH%n",date);

    System.out.printf("2位數字12時制的小時(不足2位前面補0):%tI%n",date);

    System.out.printf("2位數字24時制的小時(前面不補0):%tk%n",date);

    System.out.printf("2位數字12時制的小時(前面不補0):%tl%n",date);

    System.out.printf("2位數字的分鐘(不足2位前面補0):%tM%n",date);

    System.out.printf("2位數字的秒(不足2位前面補0):%tS%n",date);

    System.out.printf("3位數字的毫秒(不足3位前面補0):%tL%n",date);

    System.out.printf("9位數字的毫秒數(不足9位前面補0):%tN%n",date);

    String str=String.format(Locale.US,"小寫字母的上午或下午標記(英):%tp",date);

    System.out.println(str);                          // 輸出字符串變量str的內容

    System.out.printf ("小寫字母的上午或下午標記(中):%tp%n",date);

    System.out.printf("相對於GMT的RFC822時區的偏移量:%tz%n",date);

    System.out.printf("時區縮寫字符串:%tZ%n",date);

    System.out.printf("1970-1-1 00:00:00 到如今所通過的秒數:%ts%n",date);

    System.out.printf("1970-1-1 00:00:00 到如今所通過的毫秒數:%tQ%n",date);

}

}

相關文章
相關標籤/搜索