Разбор строки в Lua - PullRequest
0 голосов
/ 30 мая 2018

Я нашел много способов разбить строку через запятую в Lua, но это не совсем то, что я ищу.Мне нужно иметь возможность сделать следующее: у меня есть аргумент ABC в виде строки, и мне нужно иметь возможность извлечь только A, B и C.Как мне это сделать?Я продолжаю надеяться, что что-то вроде этого будет работать:

x = tostring(ABC)
x[1]
x[2]
x[3]

Ответы [ 4 ]

0 голосов
/ 01 июня 2018

Не путая метатаблицы:

function getCharacters(str)
local x = {}
for i=1, str:len(), 1 do
table.insert(x, str:sub(i, i))
end
return x
end

С помощью этой функции, независимо от длины строки, у вас всегда будет таблица, заполненная ее символами:)

0 голосов
/ 30 мая 2018

Если вы просто хотите получить подстроки индекса, это должно работать в большинстве версий Lua:

x = 'ABC'
print (string.sub(x, 1, 1))  -- 'A'
print (string.sub(x, 2, 2))  -- 'B'
print (string.sub(x, 3, 3))  -- 'C'

В Lua 5.1 и выше, согласно этому doc , выможет сделать следующее:

getmetatable('').__index = function(str,i) return string.sub(str,i,i) end

x = 'ABC'
print (x[1])  -- 'A'
print (x[2])  -- 'B'
print (x[3])  -- 'C'
0 голосов
/ 30 мая 2018

Вы также можете установить вызов метаметод для строк:

getmetatable ("") .__ call = string.sub

Тогда этоработы:

for i=1,4 do
        print(i,x(i),x(i,i))
end
0 голосов
/ 30 мая 2018

Это довольно просто.Просто итерация .

(Предположим, вы используете Lua версии 5.1)


Код:

str = "xyz"
for i = 1, #str do
    local c = str:sub(i,i)
    print(c)
end

Выход:

$lua main.lua
x
y
z

Попробуйте онлайн!


Или, как @ tonypdmtr сказал в комментарии:

for s in s:gmatch '.' do print(s) end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...