这个问题的措辞不是很清楚。
例如,在这里您将空间显示为符号 Q 的各部分之间的分隔符:
例如“dj ir j kw”(长长短长)
后来你说:
对于白色的空格符号,我选择了“xxxxxx”,6 个字符。
那是空格的符号,还是您在符号中使用的分隔符(例如上面的 Q)?你的帖子没有说。
在这种情况下,与往常一样,一个例子胜过千言万语。您应该已经展示了一些可能输入的示例,并展示了您希望如何解析它们。
如果你的意思是“dj ir j kw jfkl abpzoq jfkl dj ir j kw”应该被解码为“Q Q”,而你只想知道如何通过它们的长度来匹配令牌,那么......这个问题很简单。有一百万种方法可以做到这一点。
在 Lua 中,我会分两次完成。首先,将消息转换为仅包含每个连续字符块长度的字符串:
message = 'dj ir j kw jfkl abpzoq jfkl dj ir j kw'
message = message:gsub('(%S+)%s*', function(s) return #s end)
print(message) --> 22124642212
然后拆分数字 4 得到每个组
for group in message:gmatch('[^4]+') do
print(group)
end
这给了你:
2212
6
2212
所以你可以像这样转换:
function translate(message)
local lengthToLetter = {
['2212'] = 'Q',
[ '6'] = ' ',
}
local translation = {}
message = message:gsub('(%S+)%s*', function(s) return #s end)
for group in message:gmatch('[^4]+') do
table.insert(translation, lengthToLetter[group] or '?')
end
return table.concat(translation)
end
print(translate(message))