我正在尝试检查字符串中是否有某些单词。到目前为止,我创建了一个存储在表测试中的函数,如果字符串中存在该单词,则该函数将打印一条消息,如果字符串中存在该单词,则打印一条消息。
这里是MWE:
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = {str:find("sky"),str:find("car"),str:find("glass")}
local start, fim
for k, v in ipairs(test) do
if v ~= nil then
print("There's something")
elseif v == nil then
print("There's nothing")
end
end
end
highlight(stg)
奇怪的是:该函数仅识别正在检查的第一个单词,即单词sky
。如果stg
字符串没有匹配的单词,则该函数不返回任何内容。甚至没有消息There's nothing
。
如何使函数检查字符串中是否存在单词并正确打印消息?
ipairs
迭代器在找到nil
值时停止,但是string.find
有时会返回nil
。这意味着在循环内,v
永远不会是nil
。
一种解决方案是仅将搜索字符串放入表中并在循环内调用string.find
:
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = {"sky","car","glass"}
for k, v in ipairs(test) do
if str:find(v) then
print("There's something")
else
print("There's nothing")
end
end
end
highlight(stg)
使用table.pack
并按索引进行迭代。
--[[
-- For Lua 5.1 and LuaJIT
function table.pack(...)
return { n = select("#", ...), ... }
end
--]]
stg = "In this string the words sky, dog, frog can be found"
function highlight(str)
local test = table.pack((str:find("sky")),(str:find("car")),(str:find("glass")))
for n = 1, test.n do
local v = test[n]
if v ~= nil then
print("There's something")
else
print("There's nothing")
end
end
end
highlight(stg)