字串控制之簡單函式:

string.len(s) 返回字串s的長度; string.rep(s, n) 返回重複n次s的字串;例如:string.rep("A",4) = AAAA string.lower(s) 將s中的大寫字母轉換成小寫 string.upper(s) 將s中的小寫字母轉換成大寫 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個参数,default值為-1 例如: 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 擷取0個或多個整數,將每一個數字轉換成字符,然後把每一個字符連接起來成字串,然後return。 string.byte(s, i) 將字串s的第i個字符轉換成整數。第二個參數i可以更改,defult為i=1 例如: 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  ============================================================================ 另外,一個很常需要用到的指令: string.format(format, 對應數據) 用來生成特定格式的字串。

format格式如下: %c - 接受一個數字,並轉化為ASCII碼 %d, %i - 接受一個數字,並轉化為有符號之整數 %u - 接受一個數字,並轉化為無符號之整數 %o - 接受一個數字,並轉化為八進位法格式 %x - 接受一個數字,並轉化為十六進位法,且使用小寫字母 %X - 接受一個數字,並轉化為十六進位法,且使用大寫字母 %e - 接受一個數字,並轉化為科學計數法,且使用小寫字母 %E - 接受一個數字,並轉化為科學計數法,且使用大寫字母 %f - 接受一個數字,並轉化為浮點數格式 %g(%G) - 接受一個數字,並轉化為%e (%E, 或%G)及%f中較短的格式 %q - 接受一個字串,並轉化為可安全被Lua編譯器讀入之格式 %s - 接受一個字串,並按照給定的參數格式格式化字串

格式化細節,可以在%符號後添加參數. 參數如下的順序: (1) 符號: 一個+號表示其後的數字,將讓正數顯示正號,不填寫的情況只有負數顯示負號(default) (2) 佔位符號: 一個0, 在後面指定了字串寬度時佔位用,不填寫的情況佔位符號是空格 (3) 對齊標誌: 在指定了字串寬度時,不填寫以向右對齊,填入-號可改為向左對齊增加 (4) 寬度數值 (5) 小數位數/字串裁切: 在寬度數值後增加的小數部分n, 若後接f(浮點數轉換, 如%6.3f)则設定該浮點數的小數只保留n位, 若後接s(字串轉換, 如%5.3s)则設定該字串只顯示前n字

例如:  print(string.format("pi = %.4f", PI))  --> pi = 3.1416 PS: %.4f代表小數點後面有4位小數的浮點數。

d = 5; m = 11; y = 1990 print(string.format("%02d/%02d/%04d", d, m, y)) --> 05/11/1990 PS: %02d代表以固定的二位顯示十進位數,不足的補0。 而%2d前面没有指定0,不足二位會以空白補足。

tag, title = "h1", "a title" print(string.format("<%s>%s", tag, title, tag)) --> <h1>a title</h1>

格式話部分可參考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

 

資料參考 http://big-coronasdklua.blogspot.tw/2011/04/lua.html

 

demo

   

 

 

		token = "2\n         『隨機獵人』\n看看哦!這可是剛捕捉到的寵物呢!\n";
		for i = 1,RD_Hunter_List do
		  RD_Hunter_TMP[i]= math.random(1, table.getn(RD_Hunter_Pet));
			token = token .. "寵物:" .. string.format("%-14s", RD_Hunter_Pet[RD_Hunter_TMP[i]][1]) .."  價格:"..string.format("%4s", RD_Hunter_Pet[RD_Hunter_TMP[i]][3]) .."   庫存:"..RD_Hunter_Pet[RD_Hunter_TMP[i]][4] .. "\n" ;
		end
		RD_Hunter_Num = RD_Hunter_Num +1; -- 增加一個控制變數,讓同時間內的清單不會一直改變
		NLG.ShowWindowTalked( _PlayerIndex, 2, 2, 0,  token, _MeIndex); --對客戶端發送窗口的封包  page = 0
文章標籤
全站熱搜
創作者介紹
創作者 DSAworld 的頭像
DSAworld

DSA 原始人村

DSAworld 發表在 痞客邦 留言(0) 人氣(1,026)