Ruby函数删除所有空白?

Ruby中删除所有空格的函数是什么?我正在寻找类似PHP的trim()?

675492 次浏览
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"

别忘了:

$ s = "   I have white space   ".split
=> ["I", "have", "white", "space"]

如果你只想删除开头和结尾的空白(就像PHP的trim一样),你可以使用.strip,但如果你想删除< em > < / em >空白,你可以使用.gsub(/\s+/, "")

现在说这个有点晚了,但是任何在谷歌上搜索这个页面的人都可能对这个版本感兴趣

如果您想清除用户可能已剪切的预格式化文本块;以某种方式粘贴到你的应用程序,但保留单词间距,试试这个:

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方法执行的PHP功能相当于trim()

删除所有空白:

"  leading    trailing   ".squeeze(' ').strip
=> "leading trailing"

@塔斯让我意识到我原来的答案连续删除重复的字母-恶心!从那以后,我改用了压缩方法,如果使用Rails框架,这种方法对这种情况更聪明。

require 'active_support/all'
"  leading    trailing   ".squish
=> "leading trailing"


"  good    men   ".squish
=> "good men"

引用:# EYZ0

"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)
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
" Raheem Shaik ".strip

它将删除左边&右边空格。 这段代码将给我们:"Raheem Shaik"

如果您正在使用Rails/ActiveSupport,可以使用squish方法。它删除字符串两端的空白,并将多个空白分组为单个空格。

如。

" a  b  c ".squish

将导致:

"a b c"

检查# EYZ0。

split.join将销毁字符串中任何位置的所有空格。

"  a b  c    d     ".split.join
> "abcd"

它很容易输入和记忆,所以在控制台和快速破解上都很不错。在严肃的代码中可能不受欢迎,因为它掩盖了意图。

(基于Piotr在 justice 's answer上面的评论。)

你可以试试这个

"Some Special Text Values".gsub(/[[:space:]]+/, "")

使用< em >:空间:< / em >删除非间断空格和常规空格。

使用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"

我个人喜欢使用.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"

Ruby的.scan().join()方法也可以帮助克服字符串中的空白。

scan(/\w+/).join将删除所有空格并加入字符串

string = "White spaces in me".scan(/\w+/).join
=>"Whitespacesinme"

它还从字符串的左右部分删除空格。意味着ltrimrtrimtrim。以防万一有人有CFoxProVisual Basic的背景,然后跳到Ruby

< p > <代码> 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 > < /代码> < / p >

对于完全匹配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

我创建了一个基准测试,以测试stripstrip!的一些基本用途以及一些替代方案的性能。测试是这样的:

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)

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的


请注意:上面所有的方法都返回一个新的字符串,而不是改变原来的字符串。如果您想就地更改字符串,请在末尾使用!调用相应的方法。

我试图这样做,因为我想使用记录“标题”作为视图中的id,但标题有空格。

解决方案是:

record.value.delete(' ') # Foo Bar -> FooBar

你可以试试这个:

"ab c d efg hi ".split.map(&:strip)

为了得到这个:

["ab, "c", "d", "efg", "hi"]

或者如果你想要一个字符串,只需使用:

"ab c d efg hi ".split.join

我会用这样的方法:

my_string = "Foo bar\nbaz quux"


my_string.split.join
=> "Foobarbazquux"

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

删除两边的空白:

有点像php的trim()

"   Hello  ".strip

删除所有空格:

"   He    llo  ".gsub(/ /, "")

删除所有空白:

"   He\tllo  ".gsub(/\s/, "")

我有点晚了,但是我使用strip!删除了尾随和前导空格。如果您有一个数组,就像我所做的那样,我需要遍历该数组并在实例结束后保存它。!搞定了这个。这删除了结尾或开头的所有空格,而不仅仅是第一个前导或最后一个尾随。

例如:

array = ["hello ","   Melanie", "is", " new ", "to  ", " programming"]
array.each do |i|
i.strip!
end

这将输出到:["hello","Melanie", "is", "new "," to", "programming"]。我进一步探索/分享了这个在我做的一个视频中,为了突出这个代码,我遇到了类似的问题

我是较新的编程和使用strip不工作,因为它没有保存到循环结束后的数组。

这里有很多建议,但当我读到你的问题和“删除所有空白”的具体行时,我想到的是:

" 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"