Что такое функция Ruby для удаления пробела all? Вид как php trim()
?
Функция Ruby для удаления всех пробелов?
Ответ 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"
Ответ 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