如何大写数组中的元素,例外[ruby]

时间:2015-03-03 20:34:36

标签: ruby

我是编程和自学的新手我正在尝试编写一个带字符串并将字符串中的每个单词大写的程序。但是,要排除某些单词,例如“and,of,a”。目的是修复一个损坏的字符串并返回一个像字符串一样的标题。

这是我到目前为止所拥有的。

class Title
  attr_accessor :string, :fix
  def initialize(string)
    @string = string
  end

  def fix
    str = []
    final = []
    string.downcase
    string[0].capitalize
    str = string.split
    str.each_with_index do |s, x|
      if s == "and"
        final << s
      elsif s == "of"
        final << s
      elsif s == "a"
        final << s
      elsif s == "the" && x != 0
        final << s
      else
        final << s.capitalize
      end
    end
    string = final.join(' ')
    return string
  end
end

我收到的错误是我正在利用每个单词,程序忽略了我想要的异常。

2 个答案:

答案 0 :(得分:0)

你看起来像这样

class Title
  attr_accessor :string
  def initialize(string)
    @string = string
  end

  def fix
    filtered_string = string.split.select{ |a| !["and", "of", "the", "a"].include? a }
    title = filtered_string.map{ |a| a.capitalize }.join(" ")
  end
end

首先,您过滤掉排除的单词,然后将大写单词加入标题。 您不需要attr_accessor :fix,因为修复被定义为公共方法。

答案 1 :(得分:0)

这样的东西?

class Titlizer
  BLACK_LIST = %w(and of the a)

  def initialize(sentence)
    @sentence = sentence
  end

  def title
    capitalized.join(" ").capitalize
  end

  private

  def capitalized
    words.map do |word|
      if should_capitalize?(word)
        word.capitalize
      else
        word
      end
    end
  end

  def words
    @sentence.split
  end

  def should_capitalize?(word)
    !BLACK_LIST.include?(word)
  end
end