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 ?
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 ?
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)
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 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.
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.