- ruby 如何获取每个单词的第一个字母

  显示原文与译文双语对照的内容
71 1

我想要获得用户输入,然后对每个字输入,我想要获取第一个字母并显示它。例如如果用户放置 "Hello there",它应该返回 "Ht"我不想使用 map:chr如果你使用 gsub 或者 split 获得想要的结果,可以解释它是如何工作的?

时间:原作者:0个回答

60 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

这样做是:将给定的字符串( 自身) 分割成一个 array 。然后在 .each 循环中使用 .chr 方法添加单词的第一个字母,将该字母追加到一个字符串,最终返回返回的字符串。

它可以像这样缩短:

def first_chars 
 final_string =""
 self.split("").each { |word| final_string += word.chr }
 return final_string
end
原作者:
67 2

我不确定为什么你不想使用 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,并将它的转换为 String s的Array ( 列表) 。
  • map 循环通过 Array,并按指定的操作转换每个项。( 在本例中,只接受第一个字母。
  • joinArray 合并为单个 String
原作者:
52 2
puts"Oh, happy day".gsub(/|(?<=S)./, '')
 #=>"Ohd"

正则表达式读取,"匹配空格或者( | ) 匹配前面没有空格( S )的任何字符( . ),(?<=S) 是一个非空白的正追溯值。

原作者:
...