605 votes

Fonction Ruby pour supprimer tous les espaces blancs ?

Quelle est la fonction Ruby pour supprimer tous les espaces blancs ? Je recherche quelque chose de semblable à trim() en PHP ?

36 votes

Votre question n'est pas claire : voulez-vous supprimer tous les espaces vides ou voulez-vous vous débarrasser des espaces vides en début et en fin de chaîne?

26 votes

PHP's trim() supprime les espaces blancs "du début et de la fin d'une chaîne de caractères" (comme indiqué dans la documentation), il ne supprime pas "tous les espaces blancs".

3 votes

Quand vous avez un doute, consultez la documentation en ligne de Ruby pour la classe String (voir .strip ci-dessous).

880voto

joel.neely Points 17059

Si vous souhaitez supprimer uniquement les espaces vides en tête et en fin de chaîne (comme le fait trim en PHP), vous pouvez utiliser .strip, mais si vous souhaitez supprimer tous les espaces vides, vous pouvez plutôt utiliser .gsub(/\s+/, "").

5 votes

Est-ce que "/\s+/" simple signifie simplement espace blanc?

55 votes

\s+ signifie 1 ou plusieurs caractères d'espace blanc (espace, saut de ligne, tabulation). Les // qui entourent montrent qu'il s'agit d'une expression régulière.

3 votes

Cela n'est pas équivalent à trim()

521voto

Ed S. Points 70246
s = "J'ai de l'espace blanc".delete(' ')

Et pour émuler la fonction trim() de PHP :

s = "   J'ai de l'espace blanc avant et après   ".strip

13 votes

Ceci est beaucoup plus lisible que les expressions régulières, pourquoi n'est-ce pas aussi populaire?

93 votes

@ckarbass : Parce que beaucoup de gens préfèrent des solutions trop complexes aux problèmes simples. Cela part avec l'expérience.

0 votes

Je pense que c'est parce que beaucoup de personnes recherchent en réalité "strip". Même celui qui mentionne seulement "strip" est mieux classé que cette entrée.

167voto

jrhicks Points 5369

Answer connexe :

"   nettoyer mes bords   ".strip

retourne

"nettoyer mes bords"

0 votes

C'est celui que j'avais oublié. Je savais qu'il y avait une méthode pour supprimer les espaces blancs qui le ferait par défaut si aucun argument n'était passé. +1

0 votes

Ceci équivaut à tailler. Veuillez vous référer à la citation de @Tadeck ci-dessus.

3 votes

Si il y a une possibilité que la variable soit nil, assurez-vous d'exécuter la méthode .to_s avant d'exécuter la méthode strip afin que la méthode strip ne génère pas d'erreur. Par exemple, str=nil; str.to_s.strip #=> ""

111voto

Rads Points 335

Si vous utilisez Rails/ActiveSupport, vous pouvez utiliser la méthode squish. Elle supprime les espaces blancs aux deux extrémités de la chaîne et regroupe les espaces blancs multiples en un seul espace.

Par exemple.

" a  b  c ".squish

résultera en:

"a b c"

Vérifiez cette référence sur api.rubyonrails.org.

4 votes

Notez que les réponses contenant uniquement un lien sont découragées, les réponses sur SO devraient être le point final d'une recherche de solution (plutôt qu'une simple étape supplémentaire vers des références qui ont tendance à devenir obsolètes avec le temps). Merci de bien vouloir ajouter un résumé indépendant ici, en gardant le lien comme référence.

2 votes

Je pense que cette réponse a été suffisamment expliquée et le fait que le lien était une référence puisque la réponse elle-même était clairement expliquée. Cette fonction était bonne, merci.

4 votes

Ceci provient de ActiveSupport. Vous n'avez pas besoin de toute Rails pour l'utiliser, mais vous avez besoin au moins d'ActiveSupport et d'un require 'active_support/core_ext/string/filters'

98voto

rusllonrails Points 595
"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"

Supprimer fonctionne plus rapidement =)

user         system     total      real
gsub, s      0.180000   0.010000   0.190000 (0.193014)
gsub, s+     0.200000   0.000000   0.200000 (0.196408)
gsub, espace  0.220000   0.000000   0.220000 (0.222711)
gsub, join   0.200000   0.000000   0.200000 (0.193478)
delete       0.040000   0.000000   0.040000 (0.045157)

1 votes

Mais cela supprime seulement les espaces, pas tous les espaces blancs

1 votes

supprimer(" \t\r\n") s'occupera de l'espace vide habituel, et est toujours plus rapide que gsub.

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