在Lua / Torch中迭代中文字符串

时间:2016-06-16 03:38:13

标签: lua

我有一个中文的lua字符串,例如

str = '这是一个中文字符串' -- in English: 'this is a Chinese string'

现在我想迭代上面的字符串,得到以下结果:

str[1] = '这'
str[2] = '是'
str[3] = '一'
str[4] = '个'
str[5] = '中'
str[6] = '文'
str[7] = '字'
str[8] = '符' 
str[9] = '串'   

并输出9作为字符串的长度。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

如果您使用Lua 5.3中的utf8模块或与LuaJIT一起使用的luautf8模块,那么这样的事情应该有效:

local str = '这是一个中文字符串'
local tbl = {}
for p, c in utf8.codes(str) do
  table.insert(tbl, utf8.char(c))
end
print(#tbl) -- prints 9

答案 1 :(得分:0)

之前我没有在lua中使用过非英文字符,而我的模拟器只是将它们放入'?'但是有些事情可能有用:

convert = function ( str )
    local temp = {}
    for c in str:gmatch('.') do
        table.insert(temp, c)
    end
    return temp
end  

这是一个简单的函数,它利用string.gmatch()将字符串分成单个字符并将它们保存到表中。它会像这样使用:

t = convert('abcd')

这将使't'成为包含a,b,c和d的表。

t[1] = a
t[2] = b
...

我不确定这是否适用于汉字,但值得一试。