分隔/计算字符串中的行
Separate / count lines in a string
我目前正在 Lua 中为 computerCraft 编写概念验证文本编辑器;一项功能是行计数。如何计算字符串中的行数,或者至少计算换行符?
理想情况下,display/terminal 旁边还有行号,这可能适用于相同的代码。
我找不到任何足够好的搜索结果,如果已经得到答复,我将不胜感激 link。
我不知道该怎么做,理想的结果是一个数组,所有文本行都分成不同的条目;这将解决这两个问题;但可能存在更多 'bespoke' 个选项
希望在帮助下我可以实现这样的输出...
1 |while true do
2 |sleep(0)
3 |write("Example")
4 |write("Script\n\n")
5 |end
:
PPPe Code Editor ~ 5 lines
...发生变化时刷新
以字符串开头:
local str = "One sentence.\nAnother sentence.\nThe end."
然后:
local lines = {}
for line in (str):gmatch("[%a+%s]+") do
table.insert(lines, line)
end
for i, line in ipairs(lines) do
print("Line " .. i .. ": " .. line)
end
这将打印:
Line 1: One sentence.
Line 2: Another Sentence.
Line 3: The end.
您可能需要调整搜索模式以处理包含其他字符的行,但这对程序员来说是一个很好的练习。
您可以使用 string.gsub
,因为它 returns 执行替换的次数作为第二个结果:
local _, replacements = string.gsub(text, "\n", "\n")
更新(4/22/19):如果你需要给每一行添加一个行号(原来的问题是关于行数),那么你仍然可以使用string.gsub
,但是你会需要提供一个函数来计算行数,例如:
lines = 1
local text = "1 |"..string.gsub(text, "\n", function(s) lines = lines + 1 return s..lines.." |" end)
print(text)
print(lines)
对于您的文本,这将打印:
1 |while true do
2 |sleep(0)
3 |write("Example")
4 |write("Script\n\n")
5 |end
5
我目前正在 Lua 中为 computerCraft 编写概念验证文本编辑器;一项功能是行计数。如何计算字符串中的行数,或者至少计算换行符? 理想情况下,display/terminal 旁边还有行号,这可能适用于相同的代码。
我找不到任何足够好的搜索结果,如果已经得到答复,我将不胜感激 link。
我不知道该怎么做,理想的结果是一个数组,所有文本行都分成不同的条目;这将解决这两个问题;但可能存在更多 'bespoke' 个选项
希望在帮助下我可以实现这样的输出...
1 |while true do
2 |sleep(0)
3 |write("Example")
4 |write("Script\n\n")
5 |end
:
PPPe Code Editor ~ 5 lines
...发生变化时刷新
以字符串开头:
local str = "One sentence.\nAnother sentence.\nThe end."
然后:
local lines = {}
for line in (str):gmatch("[%a+%s]+") do
table.insert(lines, line)
end
for i, line in ipairs(lines) do
print("Line " .. i .. ": " .. line)
end
这将打印:
Line 1: One sentence.
Line 2: Another Sentence.
Line 3: The end.
您可能需要调整搜索模式以处理包含其他字符的行,但这对程序员来说是一个很好的练习。
您可以使用 string.gsub
,因为它 returns 执行替换的次数作为第二个结果:
local _, replacements = string.gsub(text, "\n", "\n")
更新(4/22/19):如果你需要给每一行添加一个行号(原来的问题是关于行数),那么你仍然可以使用string.gsub
,但是你会需要提供一个函数来计算行数,例如:
lines = 1
local text = "1 |"..string.gsub(text, "\n", function(s) lines = lines + 1 return s..lines.." |" end)
print(text)
print(lines)
对于您的文本,这将打印:
1 |while true do
2 |sleep(0)
3 |write("Example")
4 |write("Script\n\n")
5 |end
5