我设法在很多帮助,复制和粘贴的基础上拼凑出这个声明。它基本上返回字符串中的前x个单词,并在我的应用程序中将其用作帮助程序。
有人可以帮我理解如何添加一个条件来说明实际字符串是否小于x字不添加结束位(这是...)。因此,在下面的等式中,我喜欢“完成”部分,只有当它们超过传递给等式的单词数时才会被添加。
def first_x_words(str,n=20,finish='…')
str.split(' ')[0,n].inject{|sum,word| sum + ' ' + word} + finish
end
实际上 - 如果我能让它变得更复杂,是否有可能在我找到一个少于x个单词的条件后,检查后4个字符是否为</p>
,如果是,删除它们。
谢谢, 亚当
答案 0 :(得分:0)
这应该做你正在寻找的事情:
def first_x_words(str, n = 20, finish = '…')
# By default, Ruby will split on whitespace, so no
# argument needs to be passed.
words = str.split
# Rebuild 'n' words into a new string.
truncated = words[0..n-1].inject do |sum, word|
sum << ' ' << word
end
# Either append a finishing string or remove any
# trailing '</p>' tag.
if words.length > n
truncated << finish
else
truncated.chomp!("</p>")
end
# Return the completed string.
truncated
end
答案 1 :(得分:0)
它很乱,但如果你真的想这样做
def first_x_words(str,n=20,finish='…')
# make finish blank if the text is short enough
finish = '' if str.split(' ').count < n
str.split(' ')[0,n].inject{|sum,word| sum + ' ' + word} + finish
# remove trailing </p> if any
str.chomp('</p>')
end
我在原始代码之前和之后添加了一行代码,以便您可以更好地理解它。