Добавление оператора if на основе количества слов в строке - PullRequest
0 голосов
/ 11 декабря 2011

Мне удалось собрать воедино это утверждение, основанное на большой помощи, копировании и вставке. По сути, он возвращает первое 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 голосов
/ 11 декабря 2011

Это грязно, но если вы действительно хотите это сделать

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

Я добавил одну строку кода до и после вашего исходного кода, чтобы вы могли лучше понять его.

0 голосов
/ 11 декабря 2011

Это должно сделать то, что вы ищете:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...