如何删除一个在字符串中重复的撇号?

How do you delete one apostrophe where it is duplicated in a string?

在 ruby 中,假设我有这个字符串:"abc''xyz''"

(在 abcxyz 之后有 2 个单引号)

现在,我正试图找到一种方法将它变成这个字符串:"abc'xyz'"

我只想从这个字符串中有两个撇号背靠背的位置删除一个撇号。提前致谢。

您可以使用 String#squeeze:

"abc''xyz''".squeeze("'")
#=> "abc'xyz'"

此方法删除某个字符的重复项(如果它们紧跟在彼此之后)。它会将一行中的 n 个字符减少到一个。

例如,如果您有字符串 " '''''' ",压缩它会 return 如下:

" '''''' ".squeeze("'")
#=> " ' "

String#squeeze 是您所需要的,gsub 确实是个坏主意。

Benchmark.bm do |bm|

  bm.report("squeeze") do
    iterations.times do
      "e''eee''e'e''''e".squeeze("'")
    end
  end

  bm.report("gsub") do
    iterations.times do
      "e''eee''e'e''''e".gsub(/\'+/, "'")
    end
  end
end

结果:

        user       system     total     real
squeeze 6.109000   0.000000   6.109000  (  6.110040)
gsub    22.454000  0.000000   22.454000 ( 22.469204)