雖然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