Ce este Ruby funcția de a elimina toate spațiu alb? Un fel de php's trim()
?
String#strip
- elimina toate spațiile de la începutul și sfârșitul.
String#lstrip
- doar la început.
String#rstrip
- doar la sfârșitul anului.
String#chomp
(fără argumente) - șterge linia separatoare (\n
sau \r\n
) de la sfârșitul anului.
String#taie
- șterge ultimul caracter.
String#a șterge
- x.delete(" \t\r\n")
- șterge toate enumerate spațiu.
String#gsub
- x.gsub(/[[:spațiu:]]/, '')
- elimină toate spațiile, inclusiv unicode cele.
Notă: Toate metodele de mai sus se întoarcă un nou șir de caractere în loc de mutații original. Dacă doriți să modificați șir în loc, apelul metodei corespunzătoare cu"! " la final.
"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"
Șterge funcționează mai repede =)
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)
Puteți folosi strivi metodă. Se elimină spațiu alb pe ambele capete de sfoară și grupuri de mai multe spațiu alb la un singur spațiu.
De exemplu.
" a b c ".squish
va duce la:
"a b c"
Verifica această referință la api.rubyonrails.org.
EDIT: Aceasta funcționează numai pentru ruby on rails
L's un pic cam tarziu, dar oricine altcineva googling această pagină ar putea fi interesat în această versiune -
Dacă doriți pentru a curăța o bucată de pre-formatat textul pe care un utilizator ar putea avea cut & lipite în aplicația într-un fel, dar păstra spațierea cuvintelor, încercați acest lucru:
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"
Ruby's .bandă de metodă efectuează PHP echivalent cu
trim()`.
Pentru a elimina toate spațiu:
" leading trailing ".squeeze(' ').strip
=> "leading trailing"
@Tass m-a făcut conștient de faptul că îmi original răspuns elimină duplicat litere într-o succesiune - YUCK! Am'am de trecut la strivi metodă care este mai inteligent despre astfel de evenimente, dacă se utilizează Șine cadru.
require 'active_support/all'
" leading trailing ".squish
=> "leading trailing"
" good men ".squish
=> "good men"
`split.alătură-te va distruge toate spațiile oriunde în șir.
" a b c d ".split.join
> "abcd"
L's ușor să tastați și amintiți-vă, deci,'s frumos pe consola si pentru rapid hacking. Fără îndoială, nu este binevenit în serios cod deși la fel de măști intenție.
(Bazat pe Piotr's comenteze în Justicle's a răspunde de mai sus.)
Utilizarea gsub sau șterge. Diferența este gsub ar putea elimina file, în timp ce nu poate șterge. Uneori ai file din fișiere care sunt adăugate de către editori.
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"
La gsub metodă va face doar bine. La gsub metodă poate fi numit pe un șir și spune:
a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring
La gsub metodă caută fiecare apariție a primului argument și îl înlocuiește cu cel de-al doilea argument. În acest caz, se va înlocui fiecare spațiu în șir și scoateți-l.
Un alt exemplu:
b = "the white fox has a torn tail"
Las's a înlocui fiecare apariție a scrisoarea " t " cu un capital " T "
b = b.gsub("t","T")
puts b
#Output: The whiTe fox has a Torn Tail
Pentru un comportament care să corespundă exact cu PHP trim
, cea mai simplă metodă este de a utiliza `String#bandă de metode, astfel:
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
new_string = string.strip
puts "Updated [#{new_string}]:#{new_string.length}"
Ruby are, de asemenea, o modificare-în-loc versiune, de asemenea, numit String.dezbracă-te!` (nota de la final '!'). Asta nu't nevoie de a crea o copie a șirului, și poate fi în mod semnificativ mai repede pentru unele utilizări:
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
string.strip!
puts "Updated [#{string}]:#{string.length}"
Ambele versiuni produce această ieșire:
Original [ Many have tried; many have failed! ]:40
Updated [Many have tried; many have failed!]:34
Am creat un punct de referință pentru a testa performanța de unele utilizări de bază de bandă " și " dezbracă-te!`, precum și unele alternative. Testul este aceasta:
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
Acestea sunt rezultatele:
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)
Preferința mea personală este folosind metoda .tr
ca în:
string = "this is a string to smash together"
string.tr(' ', '') # => "thisisastringtosmashtogether"
Datorită @FrankScmitt pentru subliniind că pentru a face acest lucru șterge all spațiu(nu doar spații), ar trebui să scrie astfel:
string = "this is a string with tabs\t and a \nnewline"
string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline"
Există multe moduri: Pentru a elimina spațiile albe de la ambele părți:
un Fel de php's trim()
Ruby Foo_bar.benzi
Pentru a elimina toate spatiile:Ruby Foo_bar.gsub(/ /, "")
Pentru a elimina toate spațiu:Ruby Foo_bar.gsub(/\s/, "")
Ruby's .scanare () "și".join()
metode de Șir poate ajuta, de asemenea, pentru a depăși spațiu în șir.
`scan(/\w+/).alătură-te va elimina toate spațiile și să se alăture șirului
string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"
Este, de asemenea, eliminarea spațiu la stânga și la dreapta parte din șir. Înseamnă ltrim,
rtrim " și " trim. Doar în cazul în care cineva are de fundal peste
C,
FoxPro " sau "Visual Basic și sari în "Ruby".
2.1.6 :002 > string = " spații Albe în mine ".scanare(/\w+/).alăturați-vă => "Whitespacesinme" 2.1.6 :003 > string = " spații Albe în mine".scanare(/\w+/).alăturați-vă => "Whitespacesinme" 2.1.6 :004 > string = "spații Albe în mine ".scanare(/\w+/).alăturați-vă => "Whitespacesinme" 2.1.6 :005 >