all を削除するRubyの機能は何ですか? phpのtrim()
のようなもの?
先頭と末尾の空白のみ(PHPのトリムのように)削除したい場合は.strip
を使用できますが、 all 空白を削除する場合は代わりに.gsub(/\s+/, "")
を使用できます。
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"
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 を含むすべての空白を削除します。
注 :上記のすべてのメソッドは、元の文字列を変更するのではなく、新しい文字列を返します。文字列を変更したい場合は、最後に!
を付けて対応するメソッドを呼び出します。
"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)
squish
メソッドを使うことができます。文字列の両端の空白を削除し、複数の空白を単一の空白にグループ化します。
例えば。
" a b c ".squish
になります。
"a b c"
この参照はapi.rubyonrails.orgからチェックしてください 。
編集:Ruby on Railsでのみ動作します。
少し遅れていますが、このページを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"
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"
" Raheem Shaik ".strip
左右のスペースを削除します。このコードは私達に与えるだろう:"Raheem Shaik"
また忘れないでください。
$ s = " I have white space ".split
=> ["I", "have", "white", "space"]
split.join
は、文字列内の任意の場所にあるすべてのスペースを削除します。
" a b c d ".split.join
> "abcd"
入力や覚えが簡単なので、コンソール上ですばやくハッキングするのに最適です。それが意図を覆い隠しているけれども、おそらく真剣なコードで歓迎しないでください。
( Justicleの答え にあるPiotrのコメントに基づく)
あなたはこれを試すことができます
"Some Special Text Values".gsub(/[[:space:]]+/, "")
:space: を使用すると、通常のスペースとともに改行なしのスペースも削除されます。
"asd sda sda sd".gsub(' ', '')
=> "asdsdasdasd"
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"
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)
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
ビューのIDとしてレコードの "title"を使用したいのですが、タイトルにスペースが含まれていたので、これを実行しようとしていました。
解決策は次のとおりです。
record.value.delete(' ') # Foo Bar -> FooBar
私の個人的な好みは.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"
私はこのようなものを使うでしょう:
my_string = "Foo bar\nbaz quux"
my_string.split.join
=> "Foobarbazquux"
RubyのStringの.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 >