天天看點

Lua中string.format轉義符的使用

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



繼續閱讀