我有一个字符串在Lua,并希望迭代其中的个别字符。但没有代码我试过工程和官方手册只显示如何查找和替换子字符串:(
str = "abcd" for char in str do -- error print( char ) end for i = 1,str:len() do print( str[ i ] ) -- nil end
解决方法
在lua 5.1中,你可以用几种方法迭代字符串的字符。
基本循环是:
for i = 1,#str do local c = str:sub(i,i) -- do something with c end
但是使用带有string.gmatch()的模式来获得字符上的迭代器可能更有效:
for c in str:gmatch"." do -- do something with c end
或者甚至使用string.gsub()为每个char调用一个函数:
str:gsub(".",function(c) -- do something with c end)
在上面的所有内容中,我已经利用了字符串模块被设置为所有字符串值的Metatable的事实,所以它的函数可以使用:符号调用成员。我也使用(新到5.1,IIRC)#来获取字符串长度。
对于你的应用程序的最佳答案取决于很多因素,如果性能是重要的,基准是你的朋友。
您可能想要评估为什么需要迭代字符,并查看已绑定到Lua的正则表达式模块之一,或者现代方法查看Roberto的lpeg模块,该模块实现了解析Lua的表达式语法。