すべての空白を削除するRuby関数とは何ですか?PHPのようなものを探していtrim()
ますか?
String#strip
または照合する/\s+/
と、ASCII空白のみが削除されることに注意してください。ASCII以外の空白(HTMLなど 
)もキャプチャされるようにしたい場合は、@ EBookerからの奇妙に人気のない回答を参照してください。
すべての空白を削除するRuby関数とは何ですか?PHPのようなものを探していtrim()
ますか?
String#strip
または照合する/\s+/
と、ASCII空白のみが削除されることに注意してください。ASCII以外の空白(HTMLなど 
)もキャプチャされるようにしたい場合は、@ EBookerからの奇妙に人気のない回答を参照してください。
回答:
先頭と末尾の空白のみを削除する場合(PHPのトリムなど)、を使用できますが.strip
、すべての空白を削除する場合は、.gsub(/\s+/, "")
代わりにを使用できます。
s = "I have white space".delete(' ')
そして、PHPのtrim()
機能をエミュレートするには:
s = " I have leading and trailing white space ".strip
.delete(' ').delete('\t').delete('\n') ...
。これは過度に冗長であり、タイプミスや省略のエラーの多くの機会を提供します。
trim()
改行やその他の空白文字は削除されません。あいまいな質問の解釈を1つ選択しています。
delete()
の呼び出しを。)
関連する回答:
" clean up my edges ".strip
戻り値
"clean up my edges"
nil
である可能性がある場合は、.to_s
stripメソッドがエラーを発生させないように、strip を実行する前に必ずメソッドを実行してください。例 str=nil; str.to_s.strip #=> ""
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のもの。
注:上記のすべてのメソッドは、元の文字列を変更するのではなく、新しい文字列を返します。文字列をその場で変更したい場合!
は、最後に対応するメソッドを呼び出します。
\s
、スラッシュではなく引用符で囲まれています。また、私はドキュメントで削除が引数として正規表現を取ることができるという言及を見つけることができませんでした。
#delete
はと同様に機能すると言われてい#count
ます。コンソールでもお試しいただけます。
#strip
ではない。stackoverflow.com/questions/4859438/…を
"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)
spaces
はすべてではなくwhite spaces
delete(" \t\r\n")
典型的な空白を処理し、gsubよりも高速です。
Rails / ActiveSupportを使用している場合は、squish
メソッドを使用できます。文字列の両端の空白を削除し、複数の空白を1つのスペースにグループ化します。
たとえば
" a b c ".squish
結果は:
"a b c"
api.rubyonrails.orgからこの参照を確認してください。
require 'active_support/core_ext/string/filters'
"a \t \n \f \r \v b".squish == "a b"
少し遅いですが、このページをグーグルで検索している人なら誰でもこのバージョンに興味があるかもしれません-
ユーザーが何らかの方法でアプリにカットアンドペーストしたフォーマット済みテキストのチャンクをクリーンアップしたいが、単語の間隔は維持したい場合は、次を試してください。
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"
squish
メソッドを使用することもできます:apidock.com/rails/String/squish
squeeze(" ")
かもしれません。
Rubyの.strip
メソッドは、と同等のPHPを実行しますtrim()
。
すべての空白を削除するには:
" leading trailing ".squeeze(' ').strip
=> "leading trailing"
@Tassは、私の元の答えが重複した文字を連続して削除することを認識させました-YUCK!私はそれ以来、Railsフレームワークを使用している場合、そのような発生についてより賢いsquishメソッドに切り替えました。
require 'active_support/all'
" leading trailing ".squish
=> "leading trailing"
" good men ".squish
=> "good men"
"good men".squeeze.strip
戻ります"god men"
また、忘れないでください:
$ s = " I have white space ".split
=> ["I", "have", "white", "space"]
[" Hello World", "Big Giraffe "].map(&:split).map(&:join) #=> ["HelloWorld", "BigGiraffe"]
split.join
文字列の任意の場所にあるすべてのスペースを爆破します。
" a b c d ".split.join
> "abcd"
入力も記憶も簡単なので、コンソール上ですばやくハッキングできます。それは意図を隠すので、間違いなく深刻なコードでは歓迎されません。
(上記のJusticleの回答の Piotrのコメントに基づく)
あなたはこれを試すことができます
"Some Special Text Values".gsub(/[[:space:]]+/, "")
:space:を使用すると、通常のスペースとともに非改行スペースが削除されます。
 
やその他の非ASCII空白文字はによって削除または照合されないためです。Regexpドキュメントの「POSIXブラケット式」というタイトルのセクションを参照してくださいString#strip
/\s/
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"
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
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)
私の個人的な好みは方法を使用しています .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"
spaces
、のみではありませんall white spaces
s.tr(" \t\n", '')
代わりにを使用することを検討してください。
Ruby .scan()
と.join()
Stringのメソッドも、文字列の空白を克服するのに役立ちます。
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 >
私はこのようなものを使用します:
my_string = "Foo bar\nbaz quux"
my_string.split.join
=> "Foobarbazquux"
ゲームには少し遅れますが、を使用して末尾と先頭の空白を削除しstrip!
ます。私のように配列がある場合は、配列を反復処理して、インスタンスの終了後に保存する必要がありました。!これを処理しました。これにより、最初の先頭または最後の末尾だけでなく、末尾または先頭のすべての空白が削除されました。
例えば:
array = ["hello "," Melanie", "is", " new ", "to ", " programming"]
array.each do |i|
i.strip!
end
これは、["hello"、 "Melanie"、 "is"、 "new"、 "to"、 "programming"]に出力されます。私が作成したビデオでこれをさらに調査/共有し、私が持っていた同様の質問に対してこのコードを強調しました。
プログラミングの初心者ですが、ループの終了後にストリップを配列に保存しなかったため、ストリップを使用しても機能しませんでした。