Lua中的字串函式庫

2021-07-02 17:00:27 字數 4541 閱讀 4423

lua直譯器對字串的支援很有限。乙個程式可以建立字串並連線字串,但不能擷取子串,檢查字串的大小,檢測字串的內容。在lua中操縱字串的功能基本來自於string庫。

字串庫中的一些函式是非常簡單的:

string.

len(s)          返回字串s的長度;

string.

rep(s, n)      返回重複n次字串s的串;你使用

string.rep

("a", 2^20)可以建立乙個1m bytes的字串(比如,為了測試需要);

string.

lower

(s)       將s中的大寫字母轉換成小寫(

string.upper

將小寫轉換成大寫)。如果你想不關心大小寫對乙個陣列進行排序的話,你可以這樣:

table.sort

(a, function (a, b)

return

string.lower

(a) <

string.lower

(b)end)

string.upper

(s)       將s中的小寫字母轉換成大寫

string.upper

和string.lower

都依賴於本地環境變數。所以,如果你在 european latin-1環境下,表示式:

string.upper

("a??o")    

--> "a??o"

string.sub

(s,i,j)      

函式擷取字串s的從第i個字元到第j個字元之間的串。lua中,字串的第乙個字元索引從1開始。你也可以使用負索引,負索引從字串的結尾向前計數:-1指向最後乙個字元,-2指向倒數第二個,以此類推。所以,

string.sub

(s, 1, j)返回字串s的長度為j的字首;

string.sub

(s, j, -1)返回從第j個字元開始的字尾。如果不提供第3個引數,預設為-1,因此我們將最後乙個呼叫寫為

string.sub

(s, j);

string.sub

(s, 2, -2)返回去除第乙個和最後乙個字元後的子串。

s = "[in brackets]"

print(

string.sub

(s, 2, -2)) --> in brackets

記住:lua中的字串是恆定不變的。

string.sub

函式以及lua中其他的字串操作函式都不會改變字串的值,而是返回乙個新的字串。乙個常見的錯誤是:

string.sub

(s, 2, -2)

認為上面的這個函式會改變字串s的值。如果你想修改乙個字串變數的值,你必須將變數賦給乙個新的字串:

s =

string.sub

(s, 2, -2)

string.

char

函式和string.

byte

函式用來將字元在字元和數字之間轉換。string.char獲取0個或多個整數,將每乙個數字轉換成字元,然後返回乙個所有這些字元連線起來的字串。

string.byte

(s, i)將字串s的第i個字元的轉換成整數;第二個引數是可選的,預設情況下i=1。下面的例子中,我們假定字元用ascii表示:

print(

string.char

(97)) --> a

i = 99; print(

string.char

(i, i+1, i+2)) --> cde

print(

string.byte

("abc")) --> 97

print(

string.byte

("abc", 2)) --> 98

print(

string.byte

("abc", -1)) --> 99

上面最後一行,我們使用負數索引訪問字串的最後乙個字元。

lua提供了string.format()函式來生成具有特定格式的字串, 函式的第乙個引數是格式(formatstring), 之後是對應格式中每個代號的各種資料. 由於格式字串的存在, 使得產生的長字串可讀性大大提高了. 這個函式的格式很像c語言中的printf().函式

string.format

在用來對字串進行格式化的時候,特別是字串輸出,是功能強大的工具。這個函式有兩個引數,你完全可以照c語言的

printf

來使用這個函式。第乙個引數為格式化串:由指示符和控制格式的字元組成。指示符後的控制格式的字元可以為:十進位制'd';十六進製制'x';八進位制'o';浮點數'f';字串's'。在指示符'%'和控制格式字元之間還可以有其他的選項:用來控制更詳細的格式,比如乙個浮點數的小數的位數:

格式字串可能包含以下的轉義碼:

%c - 接受乙個數字, 並將其轉化為ascii碼表中對應的字元

%d, %i - 接受乙個數字並將其轉化為有符號的整數格式

%o - 接受乙個數字並將其轉化為八進位制數格式

%u - 接受乙個數字並將其轉化為無符號整數格式

%x - 接受乙個數字並將其轉化為十六進製制數格式, 使用小寫字母

%x - 接受乙個數字並將其轉化為十六進製制數格式, 使用大寫字母

%e - 接受乙個數字並將其轉化為科學記數法格式, 使用小寫字母e

%e - 接受乙個數字並將其轉化為科學記數法格式, 使用大寫字母e

%f - 接受乙個數字並將其轉化為浮點數格式

%g(%g) - 接受乙個數字並將其轉化為%e(%e, 對應%g)及%f中較短的一種格式

%q - 接受乙個字串並將其轉化為可安全被lua編譯器讀入的格式

%s - 接受乙個字串並按照給定的引數格式化該字串

為進一步細化格式, 可以在%號後新增引數. 引數將以如下的順序讀入:

(1) 符號: 乙個+號表示其後的數字轉義符將讓正數顯示正號. 預設情況下只有負數顯示符號.

(2) 佔位符: 乙個0, 在後面指定了字串寬度時佔位用. 不填時的預設佔位符是空格.

(3) 對齊標識: 在指定了字串寬度時, 預設為右對齊, 增加-號可以改為左對齊.

(4) 寬度數值

(5) 小數字數/字串裁切: 在寬度數值後增加的小數部分n, 若後接f(浮點數轉義符, 如%6.3f)則設定該浮點數的小數只保留n位, 若後接s(字串轉義符, 如%5.3s)則設定該字串只顯示前n位.

在這些引數的後面則是上述所列的轉義碼型別(c, d, i, f, ...).

print(

string.format

("pi = %.4f", pi))

--> pi = 3.1416

d = 5; m = 11; y = 1990

print(

string.format

("%02d/%02d/%04d", d, m, y))

--> 05/11/1990

tag, title = "h1", "a title"

print(

string.format

("<%s>%s", tag, title, tag))

-->

第乙個例子,%.4f代表小數點後面有4位小數的浮點數。第二個例子%02d代表以固定的兩位顯示十進位制數,不足的前面補0。而%2d前面沒有指定0,不足兩位時會以空白補足。對於格式串部分指示符得詳細描述清參考lua手冊,或者參考c手冊,因為lua呼叫標準c的printf函式來實現最終的功能。

以下是一些例子:

string.format("%%c: %c", 83)            輸出s

string.format("%+d", 17.0)              輸出+17

string.format("%05d", 17)               輸出00017

string.format("%o", 17)                 輸出21

string.format("%u", 3.14)               輸出3

string.format("%x", 13)                 輸出d

string.format("%x", 13)                 輸出d

string.format("%e", 1000)               輸出1.000000e+03

string.format("%e", 1000)               輸出1.000000e+03

string.format("%6.3f", 13)              輸出13.000

string.format("%q", "one\ntwo")         輸出"one\

two"

string.format("%s", "monkey")           輸出monkey

string.format("%10s", "monkey")         輸出    monkey

string.format("%5.3s", "monkey")        輸出  mon

**:

Lua中的字串函式庫

lua直譯器對字串的支援很有限。乙個程式可以建立字串並連線字串,但不能擷取子串,檢查字串的大小,檢測字串的內容。在lua中操縱字串的功能基本來自於string庫。字串庫中的一些函式是非常簡單的 string.len s 返回字串s的長度 string.rep s,n 返回重複n次字串s的串 你使用 ...

Lua中的字串函式庫

lua直譯器對字串的支援很有限。乙個程式可以建立字串並連線字串,但不能擷取子串,檢查字串的大小,檢測字串的內容。在lua中操縱字串的功能基本來自於string庫。字串庫中的一些函式是非常簡單的 string.len s 返回字串s的長度 string.rep s,n 返回重複n次字串s的串 你使用 ...

Lua中的字串函式庫

lua直譯器對字串的支援很有限。乙個程式可以建立字串並連線字串,但不能擷取子串,檢查字串的大小,檢測字串的內容。在lua中操縱字串的功能基本來自於string庫。字串庫中的一些函式是非常簡單的 string.len s 返回字串s的長度 string.rep s,n 返回重複n次字串s的串 你使用 ...