如何获得每个单词的首字母

时间:2019-03-11 17:18:28

标签: ruby

我希望获得用户输入,然后对于每个单词输入,我想取第一个字母并显示它。例如,如果用户放置"Hello there",则它应返回"Ht"。我不想使用map:chr。如果您使用gsubsplit获得理想的结果,您能解释一下它如何工作吗?

3 个答案:

答案 0 :(得分:5)

我不确定您为什么不想使用map(&:chr),但以下是不使用它的解决方案:

def first_chars(string)
  string                     # e.g. "Hello world"
    .split(' ')              # converts it to ["Hello", "world"]
    .map { |word| word[0] }  # converts it to ["H", "w"] (You could also use map(&:chr) here.)
    .join                    # converts it to "Hw"
end

first_chars("Hello world")   #=> "Hw"

这里要理解的关键部分是:

  • split取一个String并将其转换为{strong> Array s的 String(列表)
  • map遍历Array,并通过指定的操作转换每个项目。 (在这种情况下,只接受首字母。)
  • joinArray合并回单个String

答案 1 :(得分:5)

puts "Oh, happy   day".gsub(/ |(?<=\S)./, '')
  #=> "Ohd"

正则表达式读取,“匹配空格或(|)匹配任何字符(.),然后再匹配非空白(\S),{{1} }是正向后看

答案 2 :(得分:1)

这是我写的一种方法。

def first_chars
  final_string = ""

  self.split(" ").each do |word|
    final_string += word.chr
  end

  return final_string
end

您可以像"hello world".first_chars这样使用它,它会返回hw

这是什么:用空格将给定的字符串self分隔成一个数组。然后,它在.chr循环中使用.each方法添加该单词的第一个字母,然后将该字母附加到最终返回的字符串上。

可以这样缩短:

def first_chars 
   final_string = ""
   self.split(" ").each { |word| final_string += word.chr }
   return final_string
end