只有在不是全部大写字母的情况下才能缩小字数?

时间:2014-04-07 18:21:58

标签: ruby-on-rails ruby ruby-on-rails-4

是否有办法在字符串中使用小写字词 它们是不是全部大写?

例如这个字符串:

WOrd ABC Word wOrD WOrD

应该返回:

Word ABC word word word

注意:第一个词应该仍然是“句子”。

我在rails中尝试了humanizetitlecase函数,但它们也是小写的全部大写字母(通常代表某些首字母缩略词,不应该小写)。

更新

在下面的答案的帮助下,这最终为我解决了这个问题:

def fix(string)
  s = []
  string.split.each do |word|
    if word.swapcase != word.downcase
      s << word.downcase
    else
      s << word
    end
  end
  s = s.join(' ').chomp(' ')
  s[0] = s[0].capitalize
  return s
end

4 个答案:

答案 0 :(得分:2)

您可能只需检查交换箱和小写是否相同

if word.swapcase != word.downcase
    s << word.downcase + " "
else
    s << word + " "

答案 1 :(得分:1)

怎么样:

string = 'WOrd ABC Word wOrD WOrD'
string.split(' ').map.with_index {|w,i|
  /^[A-Z]+$/.match(w) ? w : i == 0 ? w.capitalize : w.downcase
}.join(' ')

产地:

=> "Word ABC word word word"

答案 2 :(得分:1)

str = 'WOrd ABC Word wOrD WOrD'

str.split.collect { |w| w.eql?(w.upcase) ? w : w.downcase }.join(' ').capitalize

=> "Word abc word word word"

答案 3 :(得分:0)

我更喜欢创建提供人类可读名称的小方法:

class String
  def all_caps?
    swapcase == downcase
  end

  def downcase_all_but_acronyms
    all_caps? ? self : downcase
  end
end

然后你的回答是:

string.split.map(&:downcase_all_but_acronyms)