4

ユーザー入力が文字列か数値かを確認する必要があります。

目的のために以下のステートメントを使用します。

Double.parseDouble(string);

ほとんどのシナリオで機能しますが、ユーザーが入力した入力が 123Fのような場合は失敗します

これは文字列と見なす必要がありますが、上記のケースでは数値と​​見なされます。私も使ってみました

 NumberUtils.isNumber(string);

それでも動作は同じです。

動作する次の正規表現パターンを試しました

"-?\\d+(\\.\\d+)?"

ただし、同じための他の代替 API はありますか。

4

3 に答える 3

0

F サフィックス付きの浮動小数点数をサポートする場合は、次のようにします。

if (str.endsWith("F") || str.endsWith("f")) {
   num = Double.parseDouble(str.substring(0, str.length() - 1));
} else {
   num = Double.parseDouble(str);
} 

ただし、これを許可しないことをお勧めします。

「f」サフィックスは、標準の数学/科学形式ではありません。特定のプログラミング言語でのみ明確に定義された意味を持ちます...プログラムのソースコードの数値リテラルとして。そのコンテキストでは、IEE 単精度表現の浮動小数点数を示します。(そして、あなたはそれを ! として扱おうとしています)double

この潜在的な混乱を回避する最善の方法 (数値と数値リテラルの違いをよく理解していない小規模なサブセット プログラマーにとって) は、単純にそれを不適切な入力として扱うことです。


ただし、同じための他の代替 API はありますか。

私の知る限り、いいえ。主に、形式が実際には意味をなさないためです。

于 2013-07-03T12:35:51.440 に答える