Was ist die Ruby -Funktion, um alle Leerzeichen zu entfernen? Ein bisschen wie PHP trim()
?
Wenn Sie nur führende und nachfolgende Leerzeichen entfernen möchten (wie bei PHP), können Sie .strip
verwenden, aber wenn Sie all entfernen möchten Leerzeichen können Sie stattdessen .gsub(/\s+/, "")
verwenden.
s = "I have white space".delete(' ')
Und um die Funktion trim()
von PHP zu emulieren:
s = " I have leading and trailing white space ".strip
Verwandte Antwort:
" clean up my edges ".strip
kehrt zurück
"clean up my edges"
String#strip
- Alle Leerzeichen am Anfang und am Ende entfernen.
String#lstrip
- von Anfang an.
String#rstrip
- nur vom Ende.
String#chomp
(ohne Argumente) - löscht Zeilentrennzeichen (_\n
_ oder _\r\n
_) am Ende.
String#chop
- löscht das letzte Zeichen.
String#delete
- x.delete(" \t\r\n")
- löscht alle aufgelisteten Leerzeichen.
String#gsub
- x.gsub(/[[:space:]]/, '')
- Entfernt alle Leerzeichen, einschließlich nicode-Zeichen .
Hinweis : Alle oben genannten Methoden geben eine neue Zeichenfolge zurück, anstatt die ursprüngliche zu mutieren. Wenn Sie die Zeichenfolge ändern möchten, rufen Sie die entsprechende Methode mit _!
_ am Ende auf.
"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"
Löschen funktioniert schneller =)
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, space 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)
Sie können die Methode squish
verwenden. Es entfernt Leerzeichen an beiden Enden der Zeichenfolge und gruppiert mehrere Leerzeichen zu einzelnen Leerzeichen.
Zum Beispiel.
" a b c ".squish
führt zu:
"a b c"
Überprüfen Sie diese Referenz von api.rubyonrails.org .
BEARBEITEN: Es funktioniert nur für Ruby on Rails
Es ist ein bisschen spät, aber jeder, der diese Seite googelt, könnte an dieser Version interessiert sein -
Wenn Sie einen Teil des vorformatierten Texts bereinigen möchten, den ein Benutzer möglicherweise ausgeschnitten und in Ihre App eingefügt hat, aber den Wortabstand beibehalten möchten, versuchen Sie Folgendes:
content = " a big nasty chunk of something
that's been pasted from a webpage or something and looks
like this
"
content.gsub(/\s+/, " ").strip
#=> "a big nasty chunk of something that's been pasted from a webpage or something and looks like this"
Rubys .strip
-Methode führt das PHP -Äquivalent zu trim()
aus.
So entfernen Sie alle Leerzeichen:
" leading trailing ".squeeze(' ').strip
=> "leading trailing"
@Tass hat mich darauf aufmerksam gemacht, dass meine ursprüngliche Antwort doppelte Buchstaben nacheinander entfernt - YUCK! Ich bin seitdem auf die Squish-Methode umgestiegen, die bei solchen Ereignissen intelligenter ist, wenn das Framework Rails verwendet wird.
require 'active_support/all'
" leading trailing ".squish
=> "leading trailing"
" good men ".squish
=> "good men"
Zitieren: http://apidock.com/Rails/String/squish
" Raheem Shaik ".strip
Es werden linke und rechte Seitenräume entfernt. Dieser Code würde uns geben: "Raheem Shaik"
Vergessen Sie auch nicht:
$ s = " I have white space ".split
=> ["I", "have", "white", "space"]
split.join
sprengt alle Leerzeichen in der Zeichenfolge.
" a b c d ".split.join
> "abcd"
Es ist einfach zu tippen und zu merken, daher ist es auf der Konsole und für schnelles Hacken eine gute Wahl. Wohl nicht im seriösen Code willkommen, da er die Absicht maskiert.
(Basierend auf Piotrs Kommentar in Antwort von Justicle oben.)
Sie könnten das versuchen
"Some Special Text Values".gsub(/[[:space:]]+/, "")
mit : space: wird das nicht unterbrechende Leerzeichen zusammen mit dem regulären Leerzeichen entfernt.
Verwenden Sie gsub oder delete. Der Unterschied ist, dass gsub Tabs entfernen kann, während delete dies nicht kann. Manchmal haben Sie Registerkarten in Dateien, die von den Redakteuren hinzugefügt werden.
a = "\tI have some whitespaces.\t"
a.gsub!(/\s/, '') #=> "Ihavesomewhitespaces."
a.gsub!(/ /, '') #=> "\tIhavesomewhitespaces.\t"
a.delete!(" ") #=> "\tIhavesomewhitespaces.\t"
a.delete!("/\s/") #=> "\tIhavesomewhitespaces.\t"
a.delete!('/\s/') #=> using single quote is unexpected, and you'll get "\tI have ome whitepace.\t"
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
Die gsub-Methode reicht völlig aus.
Die gsub-Methode kann für einen String aufgerufen werden und lautet:
a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring
Die gsub-Methode sucht nach jedem Vorkommen des ersten Arguments und ersetzt es durch das zweite Argument. In diesem Fall wird jedes Leerzeichen in der Zeichenfolge ersetzt und entfernt.
Ein anderes Beispiel:
b = "the white fox has a torn tail"
Lassen Sie uns jedes Vorkommen des Buchstabens "t" durch ein großes "T" ersetzen
b = b.gsub("t","T")
puts b
#Output: The whiTe fox has a Torn Tail
Für ein Verhalten, das genau mit PHP trim
übereinstimmt, verwenden Sie am einfachsten die String#strip
-Methode wie folgt:
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
new_string = string.strip
puts "Updated [#{new_string}]:#{new_string.length}"
Ruby hat auch eine Edit-in-Place-Version mit dem Namen String.strip!
(beachten Sie das abschließende '!'). Dies erfordert keine Kopie der Zeichenfolge und kann für einige Zwecke erheblich schneller sein:
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
string.strip!
puts "Updated [#{string}]:#{string.length}"
Beide Versionen erzeugen diese Ausgabe:
Original [ Many have tried; many have failed! ]:40
Updated [Many have tried; many have failed!]:34
Ich habe einen Benchmark erstellt, um die Leistung einiger grundlegender Verwendungen von strip
und strip!
sowie einiger Alternativen zu testen. Der Test ist dieser:
require 'benchmark'
string = 'asdfghjkl'
Times = 25_000
a = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
b = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
c = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
d = Times.times.map {|n| spaces = ' ' * (1+n/4); "#{spaces}#{spaces}#{string}#{spaces}" }
puts Ruby_DESCRIPTION
puts "============================================================"
puts "Running tests for trimming strings"
Benchmark.bm(20) do |x|
x.report("s.strip:") { a.each {|s| s = s.strip } }
x.report("s.rstrip.lstrip:") { a.each {|s| s = s.rstrip.lstrip } }
x.report("s.gsub:") { a.each {|s| s = s.gsub(/^\s+|\s+$/, "") } }
x.report("s.sub.sub:") { a.each {|s| s = s.sub(/^\s+/, "").sub(/\s+$/, "") } }
x.report("s.strip!") { a.each {|s| s.strip! } }
x.report("s.rstrip!.lstrip!:") { b.each {|s| s.rstrip! ; s.lstrip! } }
x.report("s.gsub!:") { c.each {|s| s.gsub!(/^\s+|\s+$/, "") } }
x.report("s.sub!.sub!:") { d.each {|s| s.sub!(/^\s+/, "") ; s.sub!(/\s+$/, "") } }
end
Das sind die Ergebnisse:
Ruby 2.2.5p319 (2016-04-26 revision 54774) [x86_64-darwin14]
============================================================
Running tests for trimming strings
user system total real
s.strip: 2.690000 0.320000 3.010000 ( 4.048079)
s.rstrip.lstrip: 2.790000 0.060000 2.850000 ( 3.110281)
s.gsub: 13.060000 5.800000 18.860000 ( 19.264533)
s.sub.sub: 9.880000 4.910000 14.790000 ( 14.945006)
s.strip! 2.750000 0.080000 2.830000 ( 2.960402)
s.rstrip!.lstrip!: 2.670000 0.320000 2.990000 ( 3.221094)
s.gsub!: 13.410000 6.490000 19.900000 ( 20.392547)
s.sub!.sub!: 10.260000 5.680000 15.940000 ( 16.411131)
Ich habe versucht, dies zu tun, weil ich einen Datensatz "title" als ID in der Ansicht verwenden wollte, aber die Titel hatten Leerzeichen.
eine Lösung ist:
record.value.delete(' ') # Foo Bar -> FooBar
Meine persönliche Präferenz ist die Verwendung der Methode .tr
wie in:
string = "this is a string to smash together"
string.tr(' ', '') # => "thisisastringtosmashtogether"
Vielen Dank an @FrankScmitt für den Hinweis, dass Sie zum Löschen alle Leerzeichen (nicht nur Leerzeichen) als solche schreiben müssen:
string = "this is a string with tabs\t and a \nnewline"
string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline"
Ich würde so etwas verwenden:
my_string = "Foo bar\nbaz quux"
my_string.split.join
=> "Foobarbazquux"
Rubys Methoden .scan()
und .join()
von String können auch dazu beitragen, Leerzeichen in Zeichenfolgen zu überwinden.
scan(/\w+/).join
entfernt alle Leerzeichen und verbindet die Zeichenfolge
string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"
Es entfernt auch Leerzeichen vom linken und rechten Teil der Zeichenkette. Bedeutet ltrim
, rtrim
und trim
. Nur für den Fall, dass jemand einen Hintergrund über C
, FoxPro
oder Visual Basic
hat und in Ruby
springt.
2.1.6 :002 > string = " White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :003 > string = " White spaces in me".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :004 > string = "White spaces in me ".scan(/\w+/).join => "Whitespacesinme" 2.1.6 :005 >