Функция Ruby для удаления всех пробелов?

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

Ответ 1

Если вы хотите удалить только ведущее и завершающее пробелы (например, обрезка PHP), вы можете использовать .strip, но если вы хотите удалить пробелы all, вы можете использовать вместо него .gsub(/\s+/, "").

Ответ 2

s = "I have white space".delete(' ')

И для эмуляции функции PHP trim():

s = "   I have leading and trailing white space   ".strip

Ответ 3

Связанный ответ:

"   clean up my edges    ".strip

возвращает

"clean up my edges"

Ответ 4

String#strip - удалить все пробелы с начала и конца.

String#lstrip - с самого начала.

String#rstrip - только с самого конца.

String#chomp (без аргументов) - удаляет разделители строк (\n или \r\n) с конца.

String#chop - удаляет последний символ.

String#delete - x.delete(" \t\r\n") - удаляет все перечисленные пробелы.

String#gsub - x.gsub(/[[:space:]]/, '') - удаляет все пробелы, включая unicode.


Примечание. Все приведенные выше методы возвращают новую строку вместо изменения оригинала. Если вы хотите изменить строку на месте, вызовите соответствующий метод с ! в конце.

Ответ 5

"1232 23 2 23 232 232".delete(' ')
=> "123223223232232"

Удалить работает быстрее =)

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)

Ответ 6

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

Например,

" a  b  c ".squish

приведет к:

"a b c"

Проверьте эту ссылку с api.rubyonrails.org.

EDIT: Он работает только для рубинов на рельсах

Ответ 7

Немного поздно, но кто-то другой, занимающийся поиском по этой странице, может быть заинтересован в этой версии -

Если вы хотите очистить фрагмент предварительно отформатированного текста, который пользователь может каким-то образом вырезать и вставить в ваше приложение, но сохраните интервал между словами, попробуйте следующее:

content = "      a big nasty          chunk of     something

that been pasted                        from a webpage       or something        and looks 

like      this

"

content.gsub(/\s+/, " ").strip

#=> "a big nasty chunk of something that been pasted from a webpage or something and looks like this"

Ответ 8

Ruby .strip метод выполняет эквивалент PHP trim().

Чтобы удалить все пробелы:

"  leading    trailing   ".squeeze(' ').strip
=> "leading trailing"

@Tass дал мне понять, что мой оригинальный ответ удаляет повторяющиеся буквы подряд - YUCK! С тех пор я переключился на метод squish, который умнее в таких случаях, если используется среда Rails.

require 'active_support/all'
"  leading    trailing   ".squish
=> "leading trailing"

"  good    men   ".squish
=> "good men"

Cite: http://apidock.com/rails/String/squish

Ответ 9

" Raheem Shaik ".strip

Он удалит левое и правое боковые пространства. Этот код даст нам: "Raheem Shaik"

Ответ 10

Также не забывайте:

$ s = "   I have white space   ".split
=> ["I", "have", "white", "space"]

Ответ 11

split.join будет взорвать все пробелы в любой строке строки.

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

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

(Основано на комментарии Петра в Ответ на вопрос о самоубийстве выше.)

Ответ 12

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

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

с помощью : space: удаляет неиспользуемое пространство вместе с регулярным пространством.

Ответ 13

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

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"

Ответ 14

"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"

Ответ 15

Метод 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

Ответ 16

Для поведения, точно соответствующего 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)

Ответ 17

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

решение:

record.value.delete(' ') # Foo Bar -> FooBar

Ответ 18

Мое личное предпочтение заключается в использовании метода .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"

Ответ 19

Ruby .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 >

Ответ 20

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

my_string = "Foo bar\nbaz quux"

my_string.split.join
=> "Foobarbazquux"

Ответ 21

Есть много способов:
Чтобы удалить пробелы с обеих сторон:

Вроде как php trim()

Foo_bar.strip

Чтобы удалить все пробелы:

Foo_bar.gsub(/ /, "")

Чтобы удалить все пробелы:

Foo_bar.gsub(/\s/, "")

Ответ 22

Вы можете попробовать следующее:

"ab c d efg hi ".split.map(&:strip)

чтобы получить это:

["ab, "c", "d", "efg", "hi"]

или если вы хотите одну строку, просто используйте:

"ab c d efg hi ".split.join