当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何在Lua字符串中迭代单个字符?》经验,为你挑选了3个好方法。

我在Lua中有一个字符串,想要在其中迭代单个字符.但是没有我尝试过的代码和官方手册只显示如何查找和替换子串:(

str = "abcd"
for char in str do -- error
  print( char )
end

for i = 1, str:len() do
  print( str[ i ] ) -- nil
end

RBerteig.. 120

在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)

在上面的所有内容中,我利用了将string模块设置为所有字符串值的元表的事实,因此可以使用:表示法将其函数称为成员.我也使用(新的5.1,IIRC)#来获取字符串长度.

您的应用程序的最佳答案取决于很多因素,如果性能变得重要,基准测试就是您的朋友.

您可能想要评估为什么需要迭代字符,并查看已绑定到Lua的正则表达式模块之一,或者查看Roberto的lpeg模块,该模块实现了Lua的Parsing Expression Grammers.



1> RBerteig..:

在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)

在上面的所有内容中,我利用了将string模块设置为所有字符串值的元表的事实,因此可以使用:表示法将其函数称为成员.我也使用(新的5.1,IIRC)#来获取字符串长度.

您的应用程序的最佳答案取决于很多因素,如果性能变得重要,基准测试就是您的朋友.

您可能想要评估为什么需要迭代字符,并查看已绑定到Lua的正则表达式模块之一,或者查看Roberto的lpeg模块,该模块实现了Lua的Parsing Expression Grammers.


更不用说[SciTE的最新版本](http://www.scintilla.org/SciTEDownload.html)(自2.22开始)包括Scintillua,一个基于LPEG的词法分析器,意味着它可以开箱即用,没有重新开始 - 需要编译.

2> Aaron Saarel..:

如果您使用的是Lua 5,请尝试:

for i = 1, string.len(str) do
    print( string.sub(str, i, i) )
end



3> Oleg V. Volk..:

根据手头的任务,它可能更容易使用string.byte.它也是最快的方法,因为它避免了在Lua中创建新的子字符串,这要归功于每个新字符串的哈希并检查它是否已知.您可以预先计算您查找的符号代码,string.byte以保持可读性和可移植性.

local str = "ab/cd/ef"
local target = string.byte("/")
for idx = 1, #str do
   if str:byte(idx) == target then
      print("Target found at:", idx)
   end
end

推荐阅读
wangtao
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有