1

文と文字数制限があります。文が文字数制限を超えている場合は文を切り詰めたいと考えていますが、単語の途中ではなく、スペースでのみ切り捨てます。

これは私たちがこれまでに持っているものです:

  def shortened_headline(max_length)
    return @headline unless @headline.length > max_length
    @headline[0..max_length]
  end
4

5 に答える 5

3

Railsは、オプションを渡すことができるStringメソッドなど、さまざまな便利なメソッドでクラスを拡張します。Railsを使用しない場合でも、Railsの実装をコピーするだけで済みます。のドキュメントを参照してくださいtruncate:separator

http://api.rubyonrails.org/classes/String.html#method-i-truncate

(「ソースの表示」をクリックして、実際の実装を確認できます)

于 2012-11-28T12:10:46.430 に答える
3

rindex配列または文字列の右側から何かのインデックスを見つけるために使用できる見出しをトリミングしました。

何かのようなもの:

sub_length=@headline[0..max_length].rindex(' ')

見出しの最後のスペースの位置を示します。文字列内の英数字以外の最後の文字を見つけて、最後のスペースまたは句読点で改行できるようにする場合は、正規表現で使用することもできます。

rindex の詳細はこちら。

于 2012-11-28T12:05:53.617 に答える
2

String#indexを使用する必要があります。文字列が最初に出現するインデックスを見つけ、それを受け入れてオフセットします。

注:この実装では、max_length のの最初のスペースで文字列が切り取られます(これは、あなたが望むものではないかもしれません)。max_length の前に最初のスペースをカットする必要がある場合は、@glenatron の回答を参照してください。

def shortened_headline(headline, max_length)
  return headline if headline.length < max_length

  space_pos = headline.index(' ', max_length)
  headline[0..space_pos-1]
end

h = 'How do you truncate a sentence at the nearest space?'

h[0..4] # => "How d"
shortened_headline(h, 5) # => "How do"

h[0..10] # => "How do you "
shortened_headline(h, 10) # => "How do you"

h[0..15] # => "How do you trunc"
shortened_headline(h, 15) # => "How do you truncate"
于 2012-11-28T12:06:26.657 に答える
2

ActiveSupport の文字列用のコア拡張機能、特にtruncateメソッドを見てください。

ドキュメントから:

The method truncate returns a copy of its receiver truncated after a given length:

    "Oh dear! Oh dear! I shall be late!".truncate(20)
    # => "Oh dear! Oh dear!..."

次のようにアクセスします。

irb(main):001:0> require 'active_support/core_ext/string/filters'
irb(main):002:0> 'how now brown cow'.truncate(10)
=> "how now..."

このtruncateメソッドには、余分な装飾が必要ない場合に省略記号をオフにする機能があります。

ActiveSupport は少し前にリファクタリングされ、完全なライブラリを取り込まなくても必要な機能を選択できるようになりました。良さがぎっしり詰まっています。core-extension ページには、さらに多くの情報があります。

于 2012-11-28T16:30:30.493 に答える
0
@headline[/.{,#{max_length}}(?: |\z)/]
于 2012-11-28T13:02:33.863 に答える