1. 程式人生 > >Lua中string.format佔位符的使用

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

位數不夠前面補0

比如1,2,3,10,11,在顯示時都顯示成兩位數

print(string.format("%02d", 1)) ---01
print(string.format("%02d", 11)) ---11