2016-09-14 4 views
-1

文字列がJavaの有効な浮動小数点数であり、Regexを使用したくないことを確認しようとしています。私の中央に来る最初のものはFloat.parseFloat(String)に相当するFloat.valueOf(String)を使用するかどちらかです。 これらの関数はNumberFormatExceptionを投げません。有効な文字でjavaの浮動小数点数を解析する

これはjavaで有効な値である可能性があることを理解しています。しかし、私が他の環境や言語とコミュニケートしたいとき、これらは有効ではありません!

System.out.println(Float.parseFloat("4.f")); 
System.out.println(Float.parseFloat("2.d")); 
System.out.println(Float.parseFloat("0.45d")); 
System.out.println(Float.parseFloat("0.3f")); 
System.out.println(Float.parseFloat("0d")); 
System.out.println(Float.parseFloat("0d")); 

結果:

4.0 
2.0 
0.45 
0.3 
0.0 
0.0 

私は、私は自分のパーサを書くことができます知っている、この先行投資をキャッチする任意のエレガントな方法がありますが、それは性能に影響を与えるループです。何かご意見は?

事前のおかげで...

+0

をホードが行われ、その後、「有効」が「有効」のあなたの定義は、その後、何のバックフロート – holtc

+3

に変換するとして、あなたが文字列に変換することができJavaの値はアプリケーションでは有効ではありませんか? –

+0

値が他の言語で無効な場合は、Javaでエラーが発生するのはなぜですか?唯一の方法は、解析する前に文字列内の文字をチェックすることです。 –

答えて

0

私は、他のシステムと通信するために戻って文字列に続い@holtc溶液で行くとfloatに元の文字列を変換する(その後、あなたはそれがJavaで有効であることを知っている)となります

String originalString = "4.f"; 
Float floatNum = Float.parseFloat(originalString); 
String newString = floatNum.toString(); 

実際には、他のシステムが別の場所にあり、浮動小数点の区切り記号が異なる可能性があるため、もう1つの詳細、ロケールに注意する必要があります。ブラジルでは、例えば、我々は小数点としてコンマを使用します。

String originalString = "4.f"; 
Float floatNum = Float.parseFloat(originalString); 
String newString = String.format(new Locale("pt", "BR"), "%.2f", floatNum); 
+0

Gustavoは解決してくれてありがとうございますが、私の場合、バッチ処理に文字列パラメータとしてfloat値を渡す必要があり、例外がスローされます。ロケールは私の問題ではありません。 – Rguroo

+0

喜んで助けてください!あなたがロケールを心配していない場合は、他のシステムで有効な形式の浮動小数点数を持つ新しい文字列を取得すると、コードスニペットのいずれかがうまくいくはずです。 –

関連する問題