是否有办法在字符串中使用小写字词 它们是不是全部大写?
例如这个字符串:
WOrd ABC Word wOrD WOrD
应该返回:
Word ABC word word word
注意:第一个词应该仍然是“句子”。
我在rails中尝试了humanize
和titlecase
函数,但它们也是小写的全部大写字母(通常代表某些首字母缩略词,不应该小写)。
更新
在下面的答案的帮助下,这最终为我解决了这个问题:
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
答案 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)