110 votes

Suppression des espaces multiples et des nouvelles lignes à l'intérieur d'une chaîne de caractères

Supposons que nous ayons une chaîne comme celle-ci :

Hello, my\n       name is Michael.

Comment puis-je supprimer cette nouvelle ligne et enlever les espaces qui la suivent dans une seule chaîne de caractères pour obtenir ceci ?

Hello, my name is Michael.

203voto

socjopata Points 2792

Découvrez Rails squish méthode :

http://apidock.com/rails/String/squish

7 votes

La solution la plus simple et la plus élégante. Merci. Mais il y a une chose, cette méthode est définie dans Rails, donc elle ne fonctionnera que dans les applications Rails, heureusement c'est mon cas.

4 votes

Comme Kreeki l'a dit de manière un peu floue, il s'agit d'une méthode Rails, pas d'une méthode Ruby.

17 votes

Pour un contexte non-Rails, utilisez some_string.strip.gsub(/\s+/, " ") ce qui est exactement ce que fait Squish.

40voto

steenslag Points 29662

Pour illustrer l'intégration de Ruby dans presser :

string.gsub("\n", ' ').squeeze(' ')

3 votes

Mais attention : squeeze comprimera TOUTES les chaînes de caractères qui se présentent sous forme de séries de plusieurs caractères. Donc "Squeeze my application's copy".squeeze => "Squeeze my aplication's copy".

9 votes

Mais squeeze(' ') ne fait qu'écraser les espaces. "Squeeze my application's copy".squeeze(' ') => "Squeeze my application's copy" .

23voto

Koraktor Points 9532

La méthode la plus simple serait probablement

s = "Hello, my\n       name is Michael."
s.split.join(' ') #=> "Hello, my name is Michael."

7voto

fl00r Points 41855
my_string = "Hello, my\n       name is Michael."
my_string = my_string.gsub( /\s+/, " " )

0 votes

il souhaite également supprimer le \n idéalement (je pense), il devrait être remplacé par un espace dans le cas de quelque chose comme "Hello,\nMy name is Michael"

4voto

Nikola Points 358

Utilisez Chaîne#gsub :

s = "Hello, my\n       name is Michael."
s.gsub(/\s+/, " ")

0 votes

La sortie ne serait pas correcte dans le cas de "Hello,\nMy name is Michael" . Idéalement, vous voudriez un espace où il y a une \n

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