Какая функция Ruby удаляет все белые пробелы? Что-то вроде php's trim()
?
Если вы хотите удалить только начальные и конечные пробельные символы (такие как PHP's отделка) вы можете использовать .полосу, но если вы действительно хотите удалить ***все*** пробелы, вы можете использовать
.gsub(/\с+/, " не то") вместо этого .
Строка#полоска
- удаляет все пробельные символы из начала и конца.
Строка#lstrip
- просто с самого начала.
Строка#rstrip
- только с конца.
Строка#гусеничка
(без аргументов) - удаляет разделители строк (\N
или \р\н
) от конца.
Строка#ЧОП
- удаляет последний символ.
Строка#удалить
- х.удалить(" в \т\р\н", у)
- удаляет все перечисленные пробелы.
Строка#gsub
- х.gsub(/[[:пробел:]]/, '')
- удаляет все пробельные символы, включая юникодные.
Примечание: все эти методы возвращают новую строку, вместо изменения оригинала. Если вы хотите изменить строку на месте, вызовите соответствующий метод С !
в конце.
"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"
Delete работает быстрее =)
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)
Вы можете использовать хлюпать
метод. Он удаляет пробелы с обоих концов строки и групп множественные пробелы на один пробел.
Для EG.
" a b c ".squish
приведет к:
"a b c"
Проверьте эта ссылка из api.rubyonrails.org.
Редактировать: Это работает только для Ruby на Rails
Это'ы немного поздно, но кто-то еще погуглите эта страница может быть заинтересован в таком варианте -
Если вы хотите очистить блок предварительно форматированного текста, который пользователь может вырезать и усилитель; вставить как-то в ваше приложение, но сохранения расстояния между словами, попробуйте это:
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"
Рубин'ы .способ прокладки выполняет PHP-эквивалента для отделки()
.
Чтобы удалить все пробелы:
" leading trailing ".squeeze(' ').strip
=> "leading trailing"
@ТАСС осведомил меня, что мой оригинальный ответ удаляет повторяющиеся буквы в последовательности - фу! Я'вэ так как перешли на метод хлюпать, который умнее про такие случаи при использовании в среде Rails.
require 'active_support/all'
" leading trailing ".squish
=> "leading trailing"
" good men ".squish
=> "good men"
Цитировать: http://apidock.com/rails/String/squish
`сплит.присоединяйтесь будет взорвать все пробелы в строке.
" a b c d ".split.join
> "abcd"
Это's легко набрать и запомнить, так что's хороший на консоли и для быстрого взлома. Пожалуй, не приветствуется в серьезных код, хотя, как он скрывает намерения.
(На основании п.'с комментарием в Justicle'ы ответ выше.)
Использовать 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"
Метод gsub будет делать только штрафом. Метод gsub можно назвать на веревочке и говорит:
a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring
Метод gsub ищет все вхождения первого аргумента и заменяет его вторым аргументом. В этом случае, он будет заменить каждый пробел в строке и удалить его.
Другой пример:
b = "the white fox has a torn tail"
Позвольте'ы заменить каждое вхождение букву " Т " с столичный " Т "и
b = b.gsub("t","T")
puts b
#Output: The whiTe fox has a Torn Tail
Для поведения, точно совпадающим с PHP обрезать
, самый простой способ-это использовать строку#способ прокладки, например так:
string = " Many have tried; many have failed! "
puts "Original [#{string}]:#{string.length}"
new_string = string.strip
puts "Updated [#{new_string}]:#{new_string.length}"
Рубин также имеет функции редактирования на месте версии, а также под названием строку.полосы!
(Примечание трейлинг '!'). Это не'т требуют создать копию строки, и может быть значительно быстрее за некоторые виды использования:
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
Я создал тест для тестирования производительности некоторых основных видов использования полосы
и газы!
, а также некоторые альтернативы. Тест такой:
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)
Мое личное предпочтение, используя метод .тр
как и в:
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"
Есть много способов: Удалить пробельные символы с обоих сторон:
вроде как PHP's отделка()
Руби Foo_bar.полосы `` Удалить все пробелы:
Руби Foo_bar.; и quot gsub(/ /, " - а)Чтобы удалить все пробелы: `Руби Foo_bar.gsub(/\С/, и" и")
Рубин'ы .сканирование()
и .методов соединения()
строка может также помочь преодолеть пробелы в строке.
индикатор Scan(/\W+в/).присоединяйтесь будет удалить все пробелы и объединить строки
string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"
Это также извлекать пространство от левой и правой части строки. Означает помните
, функция rtrim
и TRIM
. На всякий случай, если кто-то имеет опыт с
, вылечить
или визуальный основной и перейти в
Рубин`.
2.1.6 :002 > строка = " в меня пробелы на ".сканирование(/\ж+/).присоединяйтесь => "и Whitespacesinme и" 2.1.6 :003 > строка = " в меня пробелы на".сканирование(/\ж+/).присоединяйтесь => "и Whitespacesinme и" 2.1.6 :004 > строка = "и пробелы во мне ".сканирование(/\ж+/).присоединяйтесь => "и Whitespacesinme и" 2.1.6 :005 >