2011-12-05 36 views
2

我需要從字符串中取出/剪切前300個單詞或字符。Ruby on Rails:如何從字符串中取出/剪切前300個單詞或字符?

這意味着,我需要從字符串開始的有限數量的字符。

像截斷一樣。

有沒有這樣的功能?

+0

你需要300個字還是一定數量的字符?對於字符,請使用http://www.ruby-doc.org/core-1.9.3/String.html#method-i-5B-5D。換句話說,你需要正則表達式。或者這是一個Rails的形式或東西? – bsamek

+0

前300個字符。 – shibly

+1

@guru,請更新您問題的文字以反映字符,而不是文字。這個問題是非常誤導。 –

回答

15
str = "many words here words words words ..." 
first_500_words = str.split(" ").first(500).join(" ") 
first_500_chars = str[0..500] 
+8

'#first(500)'會更優雅 – Reactormonk

+0

@Tass,你可以發表第一個例子(500)嗎? – shibly

+0

http://stackoverflow.com/a/23031956/3728916 - 這裏是例子。如果HTML標籤也包含在文本中,則附加.html_safe – ImranNaqvi

3

取決於你的文字和性能需求的大小,一個選擇是@text.split(/\s+/).slice(0,300).join(' ')

3

如果你真的想截斷的人物等級,因爲不同的單詞顯示長度不同,頗有幾分是可取的,用途:

def truncate_words(text, length = 300, end_string = ' …') 
    words = text.split() 
    words[0..(length-1)].join(' ') + (words.length > length ? end_string : '') 
end 

,我發現在這裏:http://snippets.dzone.com/posts/show/804

如果你使用Rails,你也可以使用string.truncate但它沒有考慮到字邊界。

0
str = "this is really long string which I want to truncate..." 

str.truncate 300, separator: " " 

,或者如果你喜歡憂色括號

str.truncate(300, separator: " ") 

這都是上面的最優雅的解決方案。正如您在主題中提到的那樣,您使用Rails以便它能夠正常工作。如果您在原始的Ruby代碼,你應該寫這樣的事情:

str.split.first(300).join " " 

split方法沒有必要,如果你需要用空格到文本拆分採取的論點。

相關問題