Entfernen aller Leerzeichen aus einer Zeichenfolge in Ruby

8

Wie kann ich alle Zeilenumbrüche und Leerzeichen aus einer Zeichenfolge in Ruby entfernen?

Zum Beispiel, wenn wir eine Zeichenkette haben:

%Vor%

Es sollte dies werden:

%Vor%

Das heißt, alle Leerzeichen sollten entfernt werden.

    
Ayush Mishra 14.05.2015, 01:10
quelle

3 Antworten

24

Sie können etwas wie:

verwenden %Vor%

Oder, wenn Sie die geänderte Zeichenfolge zurückgeben möchten, anstatt die Variable zu ändern,

%Vor%

Damit können Sie es auch mit anderen Methoden verketten (d. h. something_else = var_name.gsub(...).to_i , um das Leerzeichen zu entfernen und es dann in eine Ganzzahl umzuwandeln). gsub! wird es an Ort und Stelle bearbeiten, also müßten Sie var_name.gsub!(...); something_else = var_name.to_i schreiben. Genau genommen, solange mindestens eine Änderung vorgenommen wurde, wird gsub! die neue Version zurückgeben (dh das gleiche, was gsub zurückgeben würde), aber auf die Chance, dass Sie eine Zeichenkette ohne Leerzeichen erhalten werde nil zurückgeben und die Dinge werden sich brechen. Aus diesem Grund würde ich gsub bevorzugen, wenn Sie Methoden verketten.

gsub funktioniert, indem alle Übereinstimmungen des ersten Arguments mit dem zweiten Argument des Inhalts ersetzt werden. In diesem Fall entspricht es einer Folge von aufeinanderfolgenden Leerzeichen (oder nur einer einzelnen) mit der Regex /\s+/ und ersetzt diese durch eine leere Zeichenfolge. Es gibt auch eine Blockform, wenn Sie eine Bearbeitung für den angepassten Teil durchführen möchten, anstatt nur direkt zu ersetzen; Weitere Informationen hierzu finden Sie unter String#gsub .

Die Ruby-Dokumente für die Klasse Regexp sind ein guter Ausgangspunkt, um mehr über reguläre Ausdrücke zu erfahren - - Ich habe festgestellt, dass sie in einer Vielzahl von Situationen nützlich sind, in denen ein paar Millisekunden hier und da nicht zählen und Sie keine Dinge anpassen müssen, die beliebig tief verschachtelt werden können.

Wie Gene in seinem Kommentar vorgeschlagen wurde, könntest du auch tr :

verwenden %Vor%

Es funktioniert auf ähnliche Weise, aber anstatt eine Regex zu ersetzen, ersetzt es jede Instanz des n ten Zeichens des ersten Arguments in der Zeichenfolge, in der es aufgerufen wird, durch n th Zeichen des zweiten Parameters, oder wenn nicht, mit nichts. Weitere Informationen finden Sie unter String#tr .

    
Nic Hartley 14.05.2015, 01:12
quelle
5

Sie können auch String # delete verwenden:

%Vor%

Sie könnten String # delete! zum Ändern verwenden str vorhanden, aber no delete! gibt nil zurück, wenn keine Änderung vorgenommen wurde

    
Cary Swoveland 21.05.2015 06:57
quelle
1

Alternativ könnten Sie scan die Zeichenfolge für die Ziffern /\d+/ und join das Ergebnis:

%Vor%

Bitte beachten Sie, dass dies auch alphabetische Zeichen, Bindestriche, Symbole, im Grunde alles, was keine Ziffer ist, entfernt.

    
spickermann 14.05.2015 02:02
quelle

Tags und Links