Функция Ruby для удаления всех пробелов? - PullRequest
525 голосов
/ 28 октября 2009

Что такое функция Ruby для удаления всех пробелов? Вроде как php's trim()?

Ответы [ 21 ]

19 голосов
/ 22 декабря 2014

split.join уничтожит все пробелы в любом месте строки.

"  a b  c    d     ".split.join
> "abcd"

Его легко набирать и запоминать, поэтому он удобен для консоли и для быстрого взлома. Возможно не приветствуется в серьезном коде, хотя, поскольку он маскирует намерение.

(на основе комментария Петра в ответ Юстилики выше.)

8 голосов
/ 12 июня 2015

Вы могли бы попробовать это

"Some Special Text Values".gsub(/[[:space:]]+/, "")

с использованием : пробел: удаляет неразрывный пробел вместе с обычным пробелом.

6 голосов
/ 04 июля 2013
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
6 голосов
/ 29 августа 2015

Используйте gsub или удалите. Разница в том, что gsub может удалить вкладки, а удалить - нет. Иногда у вас есть вкладки в файлах, которые добавляются редакторами.

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"
5 голосов
/ 07 мая 2016

Для поведения, точно соответствующего PHP trim, самый простой способ - использовать метод String#strip, например:

string = "  Many have tried; many have failed!    "
puts "Original [#{string}]:#{string.length}"
new_string = string.strip
puts "Updated  [#{new_string}]:#{new_string.length}"

Ruby также имеет версию для редактирования на месте, которая называется String.strip! (обратите внимание на завершающий символ '!'). Это не требует создания копии строки и может быть значительно быстрее для некоторых целей:

string = "  Many have tried; many have failed!    "
puts "Original [#{string}]:#{string.length}"
string.strip!
puts "Updated  [#{string}]:#{string.length}"

Обе версии выдают этот вывод:

Original [  Many have tried; many have failed!    ]:40
Updated  [Many have tried; many have failed!]:34

Я создал тест для проверки производительности некоторых основных применений strip и strip!, а также некоторых альтернатив. Тест такой:

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

Вот результаты:

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)
4 голосов
/ 04 января 2018

Метод gsub отлично подойдет.
Метод gsub может быть вызван на строку и говорит:

a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring

Метод gsub ищет каждое вхождение первого аргумента и заменяет его вторым аргументом. В этом случае он заменит все пробелы в строке и удалит ее.

Другой пример:

b = "the white fox has a torn tail"

Заменим каждое вхождение буквы "t" на заглавную "T"

b = b.gsub("t","T")
puts b 
#Output: The whiTe fox has a Torn Tail
3 голосов
/ 26 октября 2016

Я пытался сделать это, так как хотел использовать «заголовок» записей в качестве идентификатора в представлении, но заголовки имели пробелы.

решение:

record.value.delete(' ') # Foo Bar -> FooBar
2 голосов
/ 10 февраля 2016

Мои личные предпочтения - использование метода .tr

как в:

string = "this is a string to smash together"

string.tr(' ', '') # => "thisisastringtosmashtogether"

Спасибо @FrankScmitt за то, что он указал, что для удаления всех пробелов (не только пробелов) вам нужно написать его так:

string = "this is a string with tabs\t and a \nnewline"

string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline"
1 голос
/ 01 марта 2017

Я бы использовал что-то вроде этого:

my_string = "Foo bar\nbaz quux"

my_string.split.join
=> "Foobarbazquux"
1 голос
/ 13 апреля 2016

Ruby's .scan() и .join() методы String также могут помочь преодолеть пробелы в строке.

scan(/\w+/).join удалит все пробелы и присоединит строку

string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"

Также удаляет пробел в левой и правой части строки. Значит ltrim, rtrim и trim. На всякий случай, если у кого-то есть фон над C, FoxPro или Visual Basic и скачок Ruby.

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 >

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...