1

このコード行を実行すると: Float.parseFloat("1460000 JPY") エラーが発生します

スレッド "main" での例外 java.lang.NumberFormatException: 入力文字列の場合: "1460000 JPY"

この文字列は、これが検証なしのテキスト フィールドであるフォームからの API 呼び出しから来ています。通常は数値を入力するだけで機能しますが、この問題が発生することがあります。最初の数字だけを float として返し、末尾のアルファ文字を無視するにはどうすればよいですか?

4

4 に答える 4

4

正規表現を使用して、その文字列に数字のみが含まれているかどうかを確認できます

String apistring = "1460000 JPY";
if(apistring.matches("[0-9]+")){
// do your code
}else{
// throw some  error message
}

入力フィールドであり、ユーザーは任意のテキストを入力できると言ったため、そこから文字を削除するのは困難です。特定のパターンがあることがわかっている場合にのみ、それを剥がすことができます

于 2015-07-13T16:58:58.037 に答える
3

DecimalFormat文字列の解析については非常に寛大なので、それをお勧めします。

次のように使用できます。

DecimalFormat df = new DecimalFormat();
try {
    float parsedValue = df.parse("1460000 JPY").floatValue();
    System.out.println(parsedValue);
} catch (ParseException pe) {
    pe.printStackTrace();
    // handle exception a bit more
}

これは以下を出力します:

1460000.0

ご覧のとおり、渡された文字列が次のように数値以外で始まる場合、parseメソッドは をスローできます。ParseException

ブラブ 1460000 円

アプリでそれが起こらない場合は、気にする必要はありません。

于 2015-07-13T17:07:47.867 に答える
2

更新: @Tomが提起したバグを説明するために:

Float.parseFloat("1.46 JPY".replaceAll("[^0-9.]",""));

1.46

上記は優れたソリューションです。説明については、以下を参照してください。

@azurefrog が言ったように、数値以外の文字を取り除き、残ったものを a として解析するFloatのが方法です。次のコードを使用してこれを実現できます。

Float.parseFloat("1460000 JPY".replaceAll("[^0-9]",""));

1460000.0

"1.46"ただし、出力のような入力の場合は次のようになるため、これはあまり堅牢ではありません。

146.0

.replaceAll("[^0-9.]","").このように除外正規表現に小数点文字を追加することで、この不正確さを修正します[^0-9.]

于 2015-07-13T16:58:37.523 に答える