17

parseInt を実行すると:

Integer.parseInt(myString);

それはスローします:

NumberFormatException: For input string: ""

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

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

7 に答える 7

29

はい、しかし:それを薄い方法でラップする(そして冗長性を排除する)か、 Commons Langのelseような既存の実装を使用してください:NumberUtils.toInt(str, defaultValue)

NumberUtils.toInt(myString, 0);

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

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

  • nullを確認する、および/または...
  • NumberFormatExtension...例外をラップする
于 2012-01-08T20:30:06.233 に答える
18

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

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

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

于 2012-01-08T20:26:40.953 に答える
8

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

Integer.parseInt("0" + inputString)

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

Integer.parseInt(0 + inputString.replaceAll("\\D+",""))
于 2016-02-19T14:38:02.130 に答える
2

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

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);
于 2012-01-08T20:31:24.023 に答える
0

はい。(入力内容を検証してから、入力内容を推測してください。:-)

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

于 2012-01-08T20:26:23.833 に答える
0

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

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

于 2012-01-08T20:26:57.360 に答える
0

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

int test=str.isEmpty()?0:Integer.parseInt(str);
于 2013-11-08T12:37:52.083 に答える