46 votes

Comment supprimer les espaces répétés dans une chaîne de caractères ?

J'ai une ficelle :

"foo (2 espaces) bar (3 espaces) baaar (6 espaces) fooo"

Comment supprimer les espaces répétitifs afin qu'il n'y ait pas plus d'un espace entre deux mots ?

2 votes

Vous savez, il est facile de répondre à ce genre de question en passant en revue toutes les méthodes de String. Je recommande vivement de se familiariser avec la documentation des méthodes String, Array et Enumerable.

0 votes

Si vous ne savez pas par où commencer, consultez le site suivant http://ruby-doc.org/ puis cliquez sur le bouton API de base puis cliquez sur la classe String dans la colonne centrale supérieure.

1 votes

Pour la défense de l'OP, la suppression des espaces peut être réalisée de plusieurs façons, qui ne sont pas toutes les plus intuitives, en particulier lorsque vous regardez les résultats de l'analyse comparative.

5voto

zetetic Points 29261

Quelle est la méthode la plus performante ?

$ ruby -v
ruby 1.9.2p0 (2010-08-18 revision 29036) [i686-linux]

$ cat squeeze.rb 
require 'benchmark'
include Benchmark

string = "foo  bar   bar      baaar"
n = 1_000_000
bm(6) do |x|
  x.report("gsub      ") { n.times { string.gsub(/\s+/, " ") } }
  x.report("squeeze   ") { n.times { string.squeeze } }
  x.report("split/join") { n.times { string.split.join(" ") } }
end

$ ruby squeeze.rb 
            user     system      total        real
gsub        4.970000   0.020000   4.990000 (  5.624229)
squeeze     0.600000   0.000000   0.600000 (  0.677733)
split/join  2.950000   0.020000   2.970000 (  3.243022)

3voto

jmatraszek Points 603

Il suffit d'utiliser gsub et regexp. Par exemple :

str = "foo  bar   bar      baaar"
str.gsub(/\s+/, " ")

renverra une nouvelle chaîne de caractères ou vous pouvez modifier directement str en utilisant gsub! .

BTW. Les regexp sont très utiles - il existe de nombreuses ressources sur Internet pour tester vos propres regexp. rubular.com par exemple.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X