删除所有空白区域的Ruby功能是什么?有点像php的trim()
?
答案 0 :(得分:802)
如果您只想删除前导和尾随空格(如PHP的修剪),可以使用.strip
,但如果要删除 所有 空白,您可以改用.gsub(/\s+/, "")
。
答案 1 :(得分:466)
s = "I have white space".delete(' ')
并模拟PHP的trim()
函数:
s = " I have leading and trailing white space ".strip
答案 2 :(得分:158)
相关答案:
" clean up my edges ".strip
返回
"clean up my edges"
答案 3 :(得分:127)
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 ones。
注意:上述所有方法都会返回一个新字符串,而不是改变原始字符串。如果要更改字符串,请在最后使用!
调用相应的方法。
答案 4 :(得分:89)
"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)
答案 5 :(得分:77)
您可以使用squish
方法。它删除了字符串两端的空白区域,并将多个空格分组为单个空格。
例如。
" a b c ".squish
将导致:
"a b c"
检查this reference from api.rubyonrails.org。
编辑: 它仅适用于轨道上的红宝石
答案 6 :(得分:46)
这有点晚了,但是搜索此页面的任何人都可能会对此版本感兴趣 -
如果您想清理用户可能已切割的一大块预先格式化的文本。以某种方式粘贴到你的应用程序,但保留单词间距,试试这个:
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"
答案 7 :(得分:44)
Ruby的.strip
方法执行等效于trim()
的PHP。
删除所有空格:
" leading trailing ".squeeze(' ').strip
=> "leading trailing"
@Tass让我意识到我的原始答案会连续删除重复的字母 - 你好!我已经改用了squish方法,如果使用Rails框架,这种方法更聪明。
require 'active_support/all'
" leading trailing ".squish
=> "leading trailing"
" good men ".squish
=> "good men"
答案 8 :(得分:25)
" Raheem Shaik ".strip
它将删除左和右右侧空间。
此代码将为我们提供:"Raheem Shaik"
答案 9 :(得分:20)
另外不要忘记:
$ s = " I have white space ".split
=> ["I", "have", "white", "space"]
答案 10 :(得分:19)
split.join
会爆炸字符串中的所有空格。
" a b c d ".split.join
> "abcd"
键入和记忆很容易,所以它在控制台和快速黑客上都很不错。可以说严格的代码不受欢迎,因为它掩盖了意图。
(根据Piotr在上面的Justicle's answer中的评论。)
答案 11 :(得分:8)
你可以试试这个
"Some Special Text Values".gsub(/[[:space:]]+/, "")
使用 :space: 删除非中断空格以及常规空格。
答案 12 :(得分:6)
使用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"
答案 13 :(得分:6)
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
答案 14 :(得分:5)
对于与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)
答案 15 :(得分:4)
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 :(得分:4)
有很多方法:
要从两侧删除空格:
有点像php的trim()
Foo_bar.strip
要删除所有空格:
Foo_bar.gsub(/ /, "")
要删除所有空格:
Foo_bar.gsub(/\s/, "")
答案 17 :(得分:3)
我试图这样做,因为我想使用记录"标题"作为视图中的id,但标题有空格。
解决方案是:
record.value.delete(' ') # Foo Bar -> FooBar
答案 18 :(得分:2)
我个人偏好使用方法.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 :(得分:2)
我对游戏有些迟了,但是我使用strip!
删除了尾随空格和前导空格。如果像我一样有一个数组,我需要遍历该数组并在实例结束后保存它。 !照顾了这个。这样就删除了结尾或开头的所有空格,而不仅仅是第一个开头或最后一个结尾。
例如:
array = ["hello "," Melanie", "is", " new ", "to ", " programming"]
array.each do |i|
i.strip!
end
这将输出到:[“ hello”,“ Melanie”,“ is”,“ new”,“ to”,“ programming”]。我进一步探索/分享了此in a video I made to highlight this code for similar question I had。
我是编程新手,使用strip无效,因为它在循环结束后没有将其保存到数组中。
答案 20 :(得分:1)
Ruby的.scan()
和.join()
方法也可以帮助克服字符串中的空格。
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 >
答案 21 :(得分:1)
我会用这样的东西:
my_string = "Foo bar\nbaz quux"
my_string.split.join
=> "Foobarbazquux"
答案 22 :(得分:-1)
你可以试试这个:
"ab c d efg hi ".split.map(&:strip)
为了得到这个:
["ab, "c", "d", "efg", "hi"]
或者如果你想要一个字符串,只需使用:
"ab c d efg hi ".split.join