雖然lua中字符串拼接“string.format”相對於“..”消耗較大,但有時為了代碼的可讀性,項目中還是經常用到“string.format”。至於這兩個用法的性能看源碼也很容易看出來,這里就簡單說一下,前者其實調用C函數str_format來實現拼接的,而后者只是一個操作符,通過memcpy來拼接,並且多個“..”的操作其實也只執行了一次concat。
常用占位符
%c - 接受一個數字, 並將其轉化為ASCII碼表中對應的字符
%d, %i - 接受一個數字並將其轉化為有符號的整數格式
%o - 接受一個數字並將其轉化為八進制數格式
%u - 接受一個數字並將其轉化為無符號整數格式
%x - 接受一個數字並將其轉化為十六進制數格式, 使用小寫字母
%X - 接受一個數字並將其轉化為十六進制數格式, 使用大寫字母
%e - 接受一個數字並將其轉化為科學記數法格式, 使用小寫字母e
%E - 接受一個數字並將其轉化為科學記數法格式, 使用大寫字母E
%f - 接受一個數字並將其轉化為浮點數格式
%g(%G) - 接受一個數字並將其轉化為%e(%E, 對應%G)及%f中較短的一種格式
%q - 接受一個字符串並將其轉化為可安全被Lua編譯器讀入的格式
%s - 接受一個字符串並按照給定的參數格式化該字符串
舉例說明
對於“string.format”的使用,占位符的使用也是有部分技巧。
1)string.format中怎么匹配帶%的的字符串和占位符的使用
string.format("%d%%", 100) 輸出: 100%
string.format(""%s"", "Hello World") 輸出: "Hello World"
2)常用的格式控制符
可以在%號后添加參數. 參數將以如下的順序讀入:
(1) 符號: 一個+號表示其后的數字占位符將讓正數顯示正號. 負數不變.
(2) 占位符: 一個0, 在后面指定了字串寬度時占位用. 默認占位符是空格.
(3) 對齊標識: 在指定了字串寬度時, 默認為右對齊, 增加-號可以改為左對齊.(用於一些自動空格地方)
(4) 寬度數值 .小數位數/字串裁切: 在寬度數值后增加的小數部分n, 若后接f則設定該浮點數的小數只保留n位, 若后接s則設定該字符串只顯示前n位.
string.format("%05d", 2015) 輸出: 02015
string.format("%+04d", -2015) 輸出: -2015
string.format("%+04d", 2015) 輸出: +2015
string.format("%.5f", math.pi) 輸出: 3.14159
string.format("%.8f", 0.123456789) 輸出: 0.12345679 (這里可以看到第八位變成了9而不是8,其實是做了一個四舍五入操作)
string.format("%.4s", "canglang") 輸出: cang
string.format("%8.4s", "canglang") 輸出: cang
位數不夠前面補0
比如1,2,3,10,11,在顯示時都顯示成兩位數
print(string.format("%02d", 1)) ---01
print(string.format("%02d", 11)) ---11
本文內容摘自:https://blog.csdn.net/canglangclient/article/details/49154093?utm_source=copy
C#語言版本:String的高級用法(String.Format)