web-dev-qa-db-ja.com

parseIntが入力文字列に対してNumberFormatExceptionをスローしないようにする適切な方法: ""

ParseIntを実行すると:

Integer.parseInt(myString);

それは投げます:

NumberFormatException: For input string: ""

これは私がこのようなことをしたという意味ですか?

if(StringUtils.isNotBlank(myString))
  return Integer.parseInt(myString);
else
 return 0;
15
Mocktagish

代わりに、条件演算子を使用できます。

return StringUtils.isNotBlank(myString) ? Integer.parseInt(myString) : 0;

これを複数の場所で行う必要がある場合は、おそらくこれを別のメソッドに入れたいと思うでしょう。 myStringがnullであるか、数値以外のテキストが含まれている状況も考慮する必要があることに注意してください。

13
Jon Skeet

はい、ただし:シンメソッドでラップする(そして冗長なelseを削除する)か、 CommonsLangのNumberUtils.toInt(str, defaultValue) のような既存の実装を使用します。

NumberUtils.toInt(myString, 0);

このメソッドは、null値と変換の失敗を処理します。

同じことを自分で書くのは簡単です。

  • Nullを確認する、および/または...
  • ... NumberFormatExtension例外をラップします
26
Dave Newton

文字列が空になる可能性がある場合は、次のようにします。

Integer.parseInt("0" + inputString)

数字だけが含まれているかどうかわからない場合:

Integer.parseInt(0 + inputString.replaceAll("\\D+",""))
4
Oleg Mikhailov

あなたが持っているものは問題ありませんが、コーディングスタイルとして、私はテストを「ネガティブ」(isBlank)ではなく「ポジティブ」(isNotBlank)にすることを好みます。

if (StringUtils.isBlank(myString)) {
    return 0;
}
return Integer.parseInt(myString); // Note: No need for else when the if returns

または、より簡潔に:

return StringUtils.isBlank(myString) ? 0 : Integer.parseInt(myString);
1
Bohemian

なぜこれを検索したのかわかりませんが、簡単な方法は次のとおりです。

int test=str.isEmpty()?0:Integer.parseInt(str);
0
gndp

はい。 (入力内容を推測する前に、入力内容を検証してください。:-)

StringUtilsでApacheのcommon-langをすでに見つけている場合は+1。

0
ziesemer

Integer.parseInt(String)は、nullや空の文字列などの数値以外の入力を受け入れません。

あなたが提案したようにそれを防ぐか、NFEを捕まえてください。

0
Dan Hardiker