根据字符串中的单词数添加if语句

时间:2011-12-11 00:42:14

标签: ruby-on-rails

我设法在很多帮助,复制和粘贴的基础上拼凑出这个声明。它基本上返回字符串中的前x个单词,并在我的应用程序中将其用作帮助程序。

有人可以帮我理解如何添加一个条件来说明实际字符串是否小于x字不添加结束位(这是...)。因此,在下面的等式中,我喜欢“完成”部分,只有当它们超过传递给等式的单词数时才会被添加。

 def first_x_words(str,n=20,finish='…')
    str.split(' ')[0,n].inject{|sum,word| sum + ' ' + word} + finish
 end

实际上 - 如果我能让它变得更复杂,是否有可能在我找到一个少于x个单词的条件后,检查后4个字符是否为</p>,如果是,删除它们。

谢谢, 亚当

2 个答案:

答案 0 :(得分:0)

这应该做你正在寻找的事情:

def first_x_words(str, n = 20, finish = '&hellip;')
  # 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='&hellip;')
  # 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

我在原始代码之前和之后添加了一行代码,以便您可以更好地理解它。