iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
0
Software Development

30天 Lua重拾筆記系列 第 8

【30天Lua重拾筆記08】基礎1: 類型-字串

  • 分享至 

  • xImage
  •  

本文同步發表於個人網站

關於字串

與Python相同,字串是不可變得。但Lua字串於內部表示時,完全採用8-bits表示,包含0(\0)。這也是為什麼在基礎1: 變數一篇,會特別說明\u{1F603}的使用。

所以字串如果取其長度,可能和你想像的不一樣:

-- note: with UTF-8
print(string.len("我")) -- equal print(#"我") => 3

不過Lua是認得UTF-8的,其本身可以協助不支援UTF-8的程式語言(ex: C語言)。

-- note: with UTF-8
print(utf8.len("我")) -- => 1

C90包含<wchar.h>; C11有<uchar.h>。
儘管如此,不表示就是UTF-8

寬字元(Wide character) 是電腦抽象術語(沒有規定具體實現細節),表示比8位元字元還寬的資料類型。不同於Unicode。 -- 維基百科

因為Lua認得UTF-8,所以其原始碼最好以UTF-8儲存,否則可能執行會與想像不同。

字串的表示式

要表示字串在Lua有多種方式。

字面字串

簡單表示

與Python、JS相同,使用單引號或雙引號包起來:

s1 = 'string'
s2 = "string"

多行字串

類似於Python使用r"""""""",Lua使用[[]]來處理多行字串:

s3 = [[
multiple
string
]]

配對

其實是可以配對的,可以在[[]]加入任意相同數量的=

s4 = [======[[=]]======] -- => "[=]"

字串模板格式化

string函式庫裡有format方法,類似於C語言的printf()或是Python的str.format()

local string = require "string"
string.format("string")

字串長度

Lua可以使用#操作取得序列長度:

print(#"abc") -- => 3

也可以是用string.len()

print(string.len("abc")) -- => 3

不過如同前面所說,其計算是以8-bits為單位,結果可能與你想像不同。
如果你的字串恰好是UTF-8,可以使用utf8函式庫:

local utf8 = require "utf8"
print(utf8.len("你好,世界!")) -- => 6

字串連接

可以使用..操作連接兩個字串:

print("Hello, " .. "World")

這很像PHP使用.來連接字串。

string和utf8函式庫

Lua本身提供stringutf8兩個函式庫可以處理字串。未來有使用到的會在特別說明。


上一篇
【30天Lua重拾筆記07】基礎1: 類型-數字
下一篇
【30天Lua重拾筆記09】基礎1: 類型-函數
系列文
30天 Lua重拾筆記36
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言