8 votes

Suppression des sauts de ligne en Ruby

J'ai un problème pour supprimer \n y \r tags. Lorsque j'utilise des guillemets doubles, cela fonctionne bien, sinon cela laisse "\" . Avec gsub il ne fonctionne pas du tout sans guillemets. Pourquoi ?

"Remove \n".delete('\n') # result: "Remove" 
'Remove \n'.delete('\n') # result: "Remove \" 

J'ai trouvé cela parce que ça ne fonctionne pas avec les résultats de la base de données.

21voto

Sergio Tulentsev Points 82783

Les chaînes de caractères mono-quotes ne traitent pas la plupart des séquences d'échappement. Ainsi, lorsque vous avez

'\n'

cela signifie littéralement "chaîne de deux caractères, où le premier caractère est une barre oblique inversée et le second un 'n' minuscule". Il fait no signifie "caractère de nouvelle ligne". Pour que \n pour signifier le caractère de nouvelle ligne, vous devez le placer à l'intérieur d'une chaîne de caractères doublement citée (qui traite cette séquence d'échappement). Voici quelques exemples :

"Remove \n".delete('\n') # => "Remove \n" # doesn't match
'Remove \n'.delete('\n') # => "Remove \\" # see below

'Remove \n'.delete("\n") # => "Remove \\n" # no newline in source string
"Remove \n".delete("\n") # => "Remove " # properly removed

NOTE que le caractère backslash dans cet exemple particulier (deuxième ligne, en utilisant une chaîne de caractères entre guillemets en delete ) est tout simplement ignoré, en raison d'une logique spéciale dans l'application delete méthode. Voir la doc sur Chaîne#count pour plus d'informations. Pour contourner ce problème, utilisez gsub par exemple

'Remove \n'.gsub('\n', '') # => "Remove "

2voto

Zero Fiber Points 4239

En Programmation Ruby/Cordes

Les guillemets simples ne supportent que deux séquences d'échappement.

\' – single quote
\\ – single backslash

À l'exception de ces deux séquences d'échappement, tout le reste entre guillemets simples est traité littéralement.

Donc si vous tapez \n dans l'irb, vous récupérez \\n .

C'est pourquoi vous avez des problèmes avec delete

"Remove \n".delete('\n') #=> "Remove \n".delete("\\n") => "Remove \n"
'Remove \n'.delete('\n') #=> "Remove \\n".delete("\\n") => "Remove \\"

0voto

Wilson Silva Points 310

Si vous ne vous souciez pas des espaces vides supplémentaires, la solution la plus propre est d'utiliser #strip :

"Remove \n".strip

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