web-dev-qa-db-ja.com

すべての空白を削除するRubyの機能

all を削除するRubyの機能は何ですか? phpのtrim()のようなもの?

521
gpwu

先頭と末尾の空白のみ(PHPのトリムのように)削除したい場合は.stripを使用できますが、 all 空白を削除する場合は代わりに.gsub(/\s+/, "")を使用できます。

801
joel.neely
s = "I have white space".delete(' ')

そして、PHPのtrim()関数をエミュレートするには、

s = "   I have leading and trailing white space   ".strip
465
Ed S.

関連回答:

"   clean up my edges    ".strip

戻る

"clean up my edges"
158
jrhicks

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 を含むすべての空白を削除します。


:上記のすべてのメソッドは、元の文字列を変更するのではなく、新しい文字列を返します。文字列を変更したい場合は、最後に!を付けて対応するメソッドを呼び出します。

127
ndnenkov
"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)
88
rusllonrails

squishメソッドを使うことができます。文字列の両端の空白を削除し、複数の空白を単一の空白にグループ化します。

例えば。

" a  b  c ".squish

になります。

"a b c"

この参照はapi.rubyonrails.orgからチェックしてください

編集:Ruby on Railsでのみ動作します。

77
Radhika

少し遅れていますが、このページをgoogleで読んでいる人なら誰でもこのバージョンに興味があるかもしれません -

ユーザーが何らかの理由でアプリにカット&ペーストした可能性のある、事前にフォーマットされたテキストの塊をクリーンアップしたいが、Wordのスペースを維持したい場合は、次の手順を試してください。

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"
46
Jules Copeland

Rubyの.stripメソッドは、trim()と同等のPHPを実行します。

すべての空白を削除するには

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

@Tassは私の最初の答えが連続して重複した文字を削除することを私に気付かせた - YUCK!私はそれ以来、Railsフレームワークを使用している場合には、このような状況についてよりスマートなsquish方式に切り替えました。

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

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

引用: http://apidock.com/Rails/String/squish

44
scarver2
" Raheem Shaik ".strip

左右のスペースを削除します。このコードは私達に与えるだろう:"Raheem Shaik"

25
Buddy

また忘れないでください。

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

split.joinは、文字列内の任意の場所にあるすべてのスペースを削除します。

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

入力や覚えが簡単なので、コンソール上ですばやくハッキングするのに最適です。それが意図を覆い隠しているけれども、おそらく真剣なコードで歓迎しないでください。

Justicleの答え にあるPiotrのコメントに基づく)

19
mahemoff

あなたはこれを試すことができます

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

:space: を使用すると、通常のスペースとともに改行なしのスペースも削除されます。

7
EBooker
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
6
edikgat

Gsubまたはdeleteを使用してください。違いは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"
6
euccas

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)
5
Michael Gaskill

Gsubメソッドはうまくいくでしょう。
gsubメソッドは文字列に対して呼び出すことができ、そして言う:

a = "this is a string"
a = a.gsub(" ","")
puts a
#Output: thisisastring

Gsubメソッドは、最初の引数が出現するたびに検索し、それを2番目の引数に置き換えます。この場合、文字列内のすべてのスペースを置き換えて削除します。

もう一つの例:

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
4
bdbasinger

ビューのIDとしてレコードの "title"を使用したいのですが、タイトルにスペースが含まれていたので、これを実行しようとしていました。

解決策は次のとおりです。

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

私の個人的な好みは.trメソッドを使うことです

のように:

string = "this is a string to smash together"

string.tr(' ', '') # => "thisisastringtosmashtogether"

@FrankScmittに感謝します。これを削除するには all ホワイトスペース(スペースだけではありません)を書く必要があります。

string = "this is a string with tabs\t and a \nnewline"

string.tr(" \n\t", '') # => "thisisastringwithtabsandanewline"
2
Jeremy Gunter

私はこのようなものを使うでしょう:

my_string = "Foo bar\nbaz quux"

my_string.split.join
=> "Foobarbazquux"
1
Artur Okoński

RubyのStringの.scan()および.join()メソッドも、文字列の空白を克服するのに役立ちます。

scan(/\w+/).joinはすべてのスペースを削除して文字列を結合します

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

また、文字列の左右の部分からスペースを削除します。意味ltrimrtrimおよびtrim。万が一誰かがCFoxProまたは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 >

1
Dharmesh Rupani