String#to_i
数字が文字列の先頭にある場合にのみ機能するようです。
作品:
"123acb".to_i #=> 123
動作しませんが、私が達成しようとしていること:
"abc123def".to_i #=> 123
これを行うための組み込みメソッドを探していましたが、見つかりませんでした。正規表現を使用する唯一のオプションですか?
- 編集 - うわー!良いオプションがたくさん!余談ですが
to_i
、先頭の数字だけを扱う特定の理由はありましたか?
このようなことをするのはどうですか?
"abc123def".gsub(/\D/, '').to_i
# => 123
大きな文字列内で複数の数値を処理したい場合は、次のことができます
"a22bc123de4f004".split(/\D/).reject(&:empty?).map(&:to_i)
# => [22, 123, 4, 004]
scan
ではなくを使用した別のアプローチを次に示しsplit
ます。
>> "abc123def456ghi".scan(/\d+/).join.to_i
=> 123456
捨てscan
ながらキープすることに注意してください....split
実際の質問に答えるには、「これを行うための組み込みメソッドはありますか?」、、、および友人を組み込みに「十分に近い」と見なさない限り、 Ruby String クラスのドキュメントから、存在しないことがわかります。scan
split
to_i
delete
以下を使用してはどうString#tr
ですか?
"abc123def456ghi".tr('a-z','').to_i
# => 123456
"abc123def456ghiA".tr('A-z','').to_i
# => 123456