這裏有兩種方法。
#1使用String#gsub用正則表達式,然後String#upcase和String#[]
R =/
[a-z] # match a lower case letter
(?=[a-z]*[A-Z]) # match >= 0 lower case letters followed by an upper case letter
# in a positive lookahead
/x # free-spacing regex definition mode
def get_caps(str, n)
str.gsub(R,"").upcase[0,4]
end
get_caps("ThisIsMyString", 4) #=> "TIMS"
get_caps("ThisIsOneVeryLongString", 4) #=> "TIOV"
get_caps("MyString", 4) #=> "MSTR"
get_caps("abcde", 4) #=> "ABCD"
get_caps("", 4) #=> ""
get_caps("AbcdefGh", 4) #=> "AGH"
#2確定最後的大寫字母的索引,然後生成字符串
def get_caps(str, n)
idx = str.rindex(/[A-Z]/)
return str[0,4].upcase if idx.nil?
str.each_char.with_index.with_object('') { |(c,i),s|
s << c.upcase if (s.size < n && (i > idx || c == c.upcase)) }
end
get_caps("ThisIsMyString", 4) #=> "TIMS"
get_caps("ThisIsOneVeryLongString", 4) #=> "TIOV"
get_caps("MyString", 4) #=> "MSTR"
get_caps("abcde", 4) #=> "ABCD"
get_caps("", 4) #=> ""
get_caps("AbcdefGh", 4) #=> "AGH"
如果您希望返回nil
,如果返回的字符串包含少於n
個字符,將該檢查添加到方法中。
不錯的,安德魯。你也可以寫'str.gsub(/ [^ A-Z] +([A-Z])/,'\ 1')[0,4] .upcase'。 –
這確實很整齊!謝謝! – linkyndy