乐闻世界logo
搜索文章和话题

如何迭代Lua字符串中的单个字符?

2 个月前提问
2 个月前修改
浏览次数28

1个答案

1

在Lua中迭代字符串的单个字符可以通过多种方式实现,我将示例两种常用方法:

方法1:使用 string.sub

我们可以使用 string.sub 函数在for循环中逐一提取字符串的每个字符。string.sub(s, i, j) 从字符串s中提取从位置i到j的子串。当我们令i和j相等时,就可以逐个获取每个字符。

lua
local str = "hello" for i = 1, #str do local char = string.sub(str, i, i) print(char) end

这个例子中,#str 用于获取字符串的长度,string.sub(str, i, i) 用于获取位置i的字符,循环将依次打印出 "h", "e", "l", "l", "o"。

方法2:使用 utf8.codes

在Lua 5.3及以上版本,考虑到Unicode字符串处理,可以使用 utf8.codes 函数,它可以正确处理包含多字节Unicode字符的字符串。

lua
local str = "안녕하세요" for p, c in utf8.codes(str) do print(utf8.char(c)) end

这里,utf8.codes(str) 迭代器会遍历字符串中的每个字符(包括Unicode字符),p 是字符的位置,c 是字符的码点。utf8.char(c) 将码点转换回字符。这会逐个打印 "안", "녕", "하", "세", "요"。

以上两种方法各有适用场景:如果你处理的是ASCII或单字节字符集的文本,第一种方法很简单有效。而如果你需要正确处理包括多字节字符的Unicode文本,第二种方法更为合适。

2024年7月25日 13:50 回复

你的答案