Lua实现字符串中GSM 3.38扩展字符的多出现次数统计
统计GSM 3.38扩展字符出现次数的Lua实现方法
方法一:利用Lua模式匹配(gsub批量统计)
Lua的gsub支持模式匹配,我们可以把所有需要统计的GSM 3.38扩展字符放到字符集[]中,注意对模式元字符进行转义(比如[、]、^、{、}需要加%,\在字符串中要写成\\),直接批量替换并统计次数:
local test_str = "abc€|€]/{def" -- 构造匹配所有目标字符的模式 local gsm_ext_pattern = "[€%[%]%^%{%|%}~\\]" local _, total_count = test_str:gsub(gsm_ext_pattern, "") print(total_count) -- 输出6,符合示例预期
方法二:遍历字符逐一判断
如果需要更灵活的逻辑,可以遍历字符串的每个字符,判断是否属于目标字符集合:
local test_str = "abc€|€]/{def" -- 用表存储目标字符,便于快速查找 local target_chars = { ["€"] = true, ["["] = true, ["\\"] = true, ["]"] = true, ["^"] = true, ["{"] = true, ["|"] = true, ["}"] = true, ["~"] = true } local count = 0 -- 遍历字符串每个字符 for char in test_str:gmatch(".") do if target_chars[char] then count = count + 1 end end print(count) -- 输出6
两种方法对比
- 方法一更简洁高效,适合单纯的批量统计场景;
- 方法二更灵活,可在判断时加入额外逻辑(比如区分字符出现的位置等)。
内容的提问来源于stack exchange,提问作者Lucas Rey
相关产品推荐
相关产品推荐

