去除所有空白的Ruby函数是什么?我正在寻找一些类似于PHP的trim()?
当前回答
这里有很多建议,但当我读到你的问题和说“删除所有空白”的具体行时,我想到的是:
" a b c " => "abc"
如果这确实是需要的,你可以做这个简单的操作
wide_string = " a b c "
narrow_string = wide_string.delete(" ")
# you can pass all the different kinds
# of whitespaces that you want to remove
puts narrow_string # => "abc"
其他回答
如果你正在使用Rails/ActiveSupport,你可以使用挤压方法。它删除字符串两端的空白,并将多个空白分组为单个空格。
如。
" a b c ".squish
将导致:
"a b c"
查看api.rubyonrails.org的参考资料。
相关回答:
" clean up my edges ".strip
返回
"clean up my edges"
删除两边的空白:
有点像php的trim()
" Hello ".strip
删除所有空格:
" He llo ".gsub(/ /, "")
删除所有空白:
" He\tllo ".gsub(/\s/, "")
对于完全匹配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
我创建了一个基准测试性能的一些基本用途的长条和长条!,以及一些替代方案。测试是这样的:
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)
这里有很多建议,但当我读到你的问题和说“删除所有空白”的具体行时,我想到的是:
" a b c " => "abc"
如果这确实是需要的,你可以做这个简单的操作
wide_string = " a b c "
narrow_string = wide_string.delete(" ")
# you can pass all the different kinds
# of whitespaces that you want to remove
puts narrow_string # => "abc"
推荐文章
- 我如何检查如果一个变量是JavaScript字符串?
- 如何显示有两个小数点后的浮点数?
- 数组到哈希Ruby
- 在Lua中拆分字符串?
- 我如何让红宝石打印一个完整的回溯而不是截断一个?
- 如何在Python中按字母顺序排序字符串中的字母
- python: SyntaxError: EOL扫描字符串文字
- PHP子字符串提取。获取第一个'/'之前的字符串或整个字符串
- 如何使用RSpec的should_raise与任何类型的异常?
- 如何创建退出消息
- 忽略GEM,因为没有构建它的扩展
- 在Gem::Specification.reset期间未解决的规格:
- Delete_all vs destroy_all
- 双引号vs单引号
- 用any可以吗?'来检查数组是否为空?