文字列を厳密に整数に変換する(またはnilにする)
2023-10-22 23:53:54
質問
Webプログラミングでは、数値は文字列で入力されます。 しかし
to_i
は変換されます。
"5abc"
を
5
であり
"abc"
から
0
であり、いずれも誤答である。これらをキャッチするために、私はこう書きました。
def number_or_nil( s )
number = s.to_i
number = nil if (number.to_s != s)
return number
end
この変換を行い、文字列が数値として意図されていないことを検出する、よりきれいでRubyらしい方法はないでしょうか。
どのように解決するのですか?
整数(文字列)を使用する
文字列を整数に変換できない場合、ArgumentErrorエラーが発生します。
Integer('5abc') #=> ArgumentError: invalid value for Integer(): "5abc"
Integer('5') #=> 5
文字列が変換できないときにnilを返すようにしたい場合は、number_or_nilメソッドがまだ必要です。
def number_or_nil(string)
Integer(string || '')
rescue ArgumentError
nil
end
特定の例外からのレスキューに注意する必要があります。素の rescue ("rescue nil" など) は StandardError を継承したあらゆるエラーから rescue し、予期しない方法でプログラムの実行を妨害する可能性があります。Integer()はArgumentErrorを発生させるので、それを指定してください。
もし、例外を扱わず、単にnumber_or_nilの短いバージョンを好むなら、暗黙の戻り値を利用して、次のように書くことができます。
def number_or_nil(string)
num = string.to_i
num if num.to_s == string
end
number_or_nil '5' #=> 5
number_or_nil '5abc' #=> nil
これは期待通りに動作します。
関連
-
[解決済み] JavaでStringをintに変換するにはどうしたらいいですか?
-
[解決済み] 文字列をfloatやintにパースするにはどうしたらいいですか?
-
[解決済み] C++でintをstringに変換する最も簡単な方法
-
[解決済み] 文字列が数値(float)であるかどうかを確認するにはどうすればよいですか?
-
[解決済み] 2つのリストを辞書に変換するにはどうしたらいいですか?
-
[解決済み] Rubyでnilとemptyとblankを理解する方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] UTF-8 byte[]を文字列に変換する方法
-
[解決済み] JavaでStringをInputStreamに変換する方法を教えてください。
-
[解決済み] バージョン要件におけるティルデグレータン(~>)の意味?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ハッシュの配列をハッシュの値でソートするにはどうしたらいいですか?
-
[解決済み] Rubyの"==="演算子は何をするのですか?重複] [重複
-
[解決済み] rubyのClassとKlassの違いは何ですか?
-
[解決済み] Rubyでjavaのインターフェースに相当するものは何ですか?
-
[解決済み] define_methodを使ってクラスメソッドを作成するには?
-
[解決済み] メソッドから2つ以上の値を返す
-
[解決済み] Rubyで配列を一度に初期化するには?
-
[解決済み] 変数名を使ったRubyの正規表現
-
[解決済み] Rubyで、selectとmapを組み合わせたArrayメソッドはありますか?
-
[解決済み] FactoryGirlのbuildメソッドとcreateメソッドの違いは何ですか?