我被要求编写一些Ruby代码,将句子中每个单词的最后一个字符更改为大写字母.这样的字符串:
"script to convert the last letter of every word to a capital"
Run Code Online (Sandbox Code Playgroud)
变
"scripT tO converT thE lasT letteR oF everY worD tO A capitaL"
Run Code Online (Sandbox Code Playgroud)
这是我最终使用的:
"script to convert the last letter of every word to a capital".split.map{|w|w<<w.slice!(-1).chr.upcase}.join' '
Run Code Online (Sandbox Code Playgroud)
对于那些对这里发生的事情感兴趣的人是一个解释.
split会将句子分成一个数组,默认的分隔符是一个空格,使用Ruby你不需要在这里使用括号.
将数组映射split传递给map,它打开一个块并处理数组中的每个单词(w).块切片!(S)断字的最后一个字符,并将其转换为CHR(字符不是ASCII码),然后大写upcase它.此字符现在附加<<到缺少切片的最后一个字母的单词.最后字的阵列现在加入了一起'改革句子.
这是一个快速而肮脏的正则表达式方法,肯定会以我未考虑过的方式被打破:
"the quick brown fox jumps over the lazy dog".gsub(/.\b/) { |m| m.upcase }
Run Code Online (Sandbox Code Playgroud)
即在字边界之前加上最后一个字符匹配.