计算字符串出现次数

Yar*_*tov 10 lua

我正在尝试计算字符串中出现" - "的次数.

例如,它在这里出现两次'a --b --c'

我试过以下,但它给了我4而不是2,任何想法为什么?

argv='a --b --c'
count = 0
for i in string.gfind(argv, " --") do
   count = count + 1
end
print(count)
Run Code Online (Sandbox Code Playgroud)

Mik*_*ran 24

您实际上可以使用string.gsub以下方式执行此操作:

local _, count = string.gsub(argv, " %-%-", "")
print(count)
Run Code Online (Sandbox Code Playgroud)

不需要循环!

不建议用于大输入,因为该函数将处理后的输入返回给_变量,并将保留在内存中,直到变量被销毁.

  • 而不是使用虚拟变量,[select](https://www.lua.org/manual/5.3/manual.html#pdf-select)可以丢弃第一个返回值,即带有替换的字符串,这样可以减少内存占用. (2认同)

int*_*jay 7

-字符在模式的特殊含义,用于非贪婪重复.

你需要逃避它,即使用模式" %-%-".


小智 7

根据Mike Corcoran的回应和WD40的优化建议,此片段可能会有所帮助

function count(base, pattern)
    return select(2, string.gsub(base, pattern, ""))
end

print(count('Hello World', 'l'))
Run Code Online (Sandbox Code Playgroud)