2013-04-04 115 views
0

我試圖將一個字符串拆分爲2個字符串,當主字符串超過30個字符時,我想使用的分隔符是字符之間的簡單空格(主字符串中的單詞之間的最後一個空格),因此它不會刪除單詞。我要求你們幫忙,因爲我在Lua中的模式不太好。如何按字符串長度和分隔符分割字符串?

+0

請提供你正在嘗試做一個例子。 – lhf 2013-04-04 10:54:50

+0

比方說,有一個字符串:「長字符串字符串字符串」它超過30個字符,現在腳本按字符串中的最後一個空格分割字符串。所以字符串會這樣: (line1):長字符串字符串字符串 (line2):字符串 – nuberelo 2013-04-04 11:18:31

+0

@nuberelo:把它放在* question *中,而不是註釋。 – 2013-04-04 12:09:54

回答

5
local function split(str, max_line_length) 
    local lines = {} 
    local line 
    str:gsub('(%s*)(%S+)', 
     function(spc, word) 
     if not line or #line + #spc + #word > max_line_length then 
      table.insert(lines, line) 
      line = word 
     else 
      line = line..spc..word 
     end 
     end 
    ) 
    table.insert(lines, line) 
    return lines 
end 

local main_string = 'This is very very very very very very long string' 
for _, line in ipairs(split(main_string, 20)) do 
    print(line) 
end 


-- Output 
This is very very 
very very very very 
long string 
+0

伊戈爾它仍然打印一切爲我的嗯。 – nuberelo 2013-04-04 11:15:11

+0

對不起!工作得很好,我很新,所以我犯了一個小錯誤!再次感謝 – nuberelo 2013-04-04 12:29:19

+0

真棒,謝謝! – 2014-11-26 14:19:07

0

如果你只是想串在字與字之間的最後一個空格分開,試試這個

s="How to split string by string length and a separator" 
a,b=s:match("(.+) (.+)") 
print(s) 
print(a) 
print(b) 
+0

不錯,但是它的功能是將字符串按最後一個空格拆分,但是我想要做的是將它拆分爲最接近20/30個字符的最後一個空格。所以它不會是這樣的: (一號線):長很長很長的字符串 (2號線):字符串 但更多的是這樣的: (一號線):長串串串串 (2號線):字符串這是字符串 – nuberelo 2013-04-04 12:17:19

+2

@nuberelo的資源,該要求不在問題的標題中:-) – lhf 2013-04-04 12:35:12