使用gsub或sub替换字符串

时间:2013-12-16 14:45:39

标签: ruby string gsub

我明天正在读考试。之前的一个问题是定义一个方法,如果元素以e结尾,则将a添加到数组元素(符号数组);如果元素以{结尾,则添加s {1}}。

不使用gsub或sub我可以做到这一点:

i

但是,使用arbitrary = [:alpha, :beta, :kappa, :phi] p arbitrary def pluralise (array) manipulate = [] array.each {|member| string = member.to_s last_char = string[-1,1] if last_char == "a" then string = string + "e" manipulate << string.to_sym end if last_char == "i" then string = string + "s" manipulate << string.to_sym end } manipulate end new_arbitrary = pluralise(arbitrary) p new_arbitrary gsub尝试此操作不会更改数组:

sub

有没有人知道这里出了什么问题?

由于

2 个答案:

答案 0 :(得分:2)

将行string.gsub(string, string + "s")修改为string.gsub!(string, string + "s")。它会起作用。

String#gsub适用于接收器的副本,其中String.gsub!适用于接收器本身。

答案 1 :(得分:1)

您可以在map和case语句中对数组进行整个查找和替换。

[:alpha, :beta, :kappa, :phi].map do |v|
  v = v.to_s
  case v[-1]
  when 'a' then v + 'e'
  when 'i' then v + 's'
  else v
  end
end