去除所有空白的Ruby函数是什么?我正在寻找一些类似于PHP的trim()?
当前回答
" Raheem Shaik ".strip
它将删除左边和右边的空格。 这段代码会给我们"拉希姆·谢克"
其他回答
对于完全匹配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)
我个人倾向于使用.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"
String#strip -删除开头和结尾的所有空白。
字符串#lstrip -只是从开始。
String#rstrip -只从末尾开始。
String#chomp(不带参数)-从末尾删除行分隔符(\n或\r\n)。
String#chop -删除最后一个字符。
x.delete(" \t\r\n")删除所有列出的空白。
String#gsub - x.gsub(/[[:space:]]/, ") -删除所有空白,包括unicode空白。
注意:上面所有的方法都返回一个新的字符串,而不是改变原来的字符串。如果您想就地更改字符串,请使用!最后。
分裂。Join将丢弃字符串中任何位置的所有空格。
" a b c d ".split.join
> "abcd"
它很容易输入和记忆,所以在控制台和快速破解上都很不错。在严肃的代码中可能不受欢迎,因为它掩盖了意图。
(基于上文justice的回答中Piotr的评论)
如果你只想删除开头和结尾的空白(就像PHP的trim一样),你可以使用.strip,但如果你想删除所有的空白,你可以使用.gsub(/\s+/, "")。
推荐文章
- bash:错误的替换
- 在c#中检查字符串是否只包含数字的最快方法
- Ruby中没有增量操作符(++)?
- 如何得到一个特定的输出迭代哈希在Ruby?
- Ruby正则表达式中\A \z和^ $的区别
- 我怎么能强迫一个长字符串没有任何空白被包装?
- 转换JSON字符串到JSON对象c#
- 将查询字符串解析为数组
- 如何追加一个字符到std::字符串?
- __FILE__在Ruby中是什么意思?
- Paperclip::Errors::MissingRequiredValidatorError with Rails
- 删除字符串中的字符列表
- 在Java中转换float为String和String为float
- Ruby:如何将散列转换为HTTP参数?
- 使用Pandas为字符串列中的每个值添加字符串前缀