Ruby函数删除所有的空格?
什么是删除所有空白的Rubyfunction? 有点像PHP的trim()
?
如果你只想删除前后的空格(比如PHP的trim),你可以使用.strip
,但是如果你想删除所有的空格,你可以使用.gsub(/\s+/, "")
。
s = "I have white space".delete(' ')
并模仿PHP的trim()
函数:
s = " I have leading and trailing white space ".strip
相关解答:
" clean up my edges ".strip
回报
"clean up my edges"
"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)
你可以使用squish
方法。 它删除string两端的空白,并将多个空白分组到单个空间。
例如。
" abc ".squish
将导致:
"abc"
从api.rubyonrails.org检查这个参考 。
编辑:它只适用于轨道上的ruby
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 。
注意 :上面的所有方法都会返回一个新string,而不是改变原始string。 如果您想要更改string,请使用!
最后。
这有点晚,但其他任何人使用此页面可能会对此版本感兴趣 –
如果你想清理一个用户可能以某种方式剪切和粘贴到应用程序中的预格式化文本,但是保留字间距,试试这个:
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的.strip
方法执行与trim()
相当的PHP。
要删除所有空格:
" leading trailing ".squeeze(' ').strip => "leading trailing"
@Tass让我意识到,我的原始答案连续删除重复的字母 – YUCK! 因为如果使用Rails框架,我已经切换到了这种更加智能的压扁方法。
require 'active_support/all' " leading trailing ".squish => "leading trailing" " good men ".squish => "good men"
引用: http : //apidock.com/rails/String/squish
" Raheem Shaik ".strip
它将删除左侧和右侧的空间。 这个代码会给我们: "Raheem Shaik"
另外不要忘记:
$ s = " I have white space ".split => ["I", "have", "white", "space"]
split.join
将爆炸string中任何位置的所有空格。
" abcd ".split.join > "abcd"
键入和记住很容易,所以在控制台上很好,并且可以快速进行黑客入侵。 虽然它掩盖了这个意图,但是在严肃的代码中可以不受欢迎。
(根据Piotr在Justicle上面的回答中的评论。)
"asd sda sda sd".gsub(' ', '') => "asdsdasdasd"
使用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"
我个人的偏好是使用方法.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"
对于完全匹配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.strip!
(注意尾随'!')。 这不需要创buildstring的副本,并且对于某些用途可以显着更快:
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
我创build了一个基准来testingstrip
和strip!
的一些基本用法的性能strip!
,以及一些替代品。 testing是这样的:
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)
你可以试试这个
"Some Special Text Values".gsub(/[[:space:]]+/, "")
使用:空间:随着常规空间去除非破坏空间。
Ruby的.scan()
和.join()
方法也可以帮助克服string中的空白。
scan(/\w+/).join
将删除所有空格并joinstring
string = "White spaces in me".scan(/\w+/).join =>"Whitespacesinme"
它也从string的左边和右边删除空格。 意思是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 >
我试图这样做,因为我想在视图中使用logging“标题”作为标识,但标题中有空格。
一个解决scheme是:
record.value.delete(' ') # Foo Bar -> FooBar
我会用这样的东西:
my_string = "Foo bar\nbaz quux" my_string.split.join => "Foobarbazquux"
你可以试试这个:
"ab cd efg hi ".split.map(&:strip)
为了得到这个:
["ab, "c", "d", "efg", "hi"]
或者如果你想要一个string,只需使用:
"ab cd efg hi ".split.join