数字のある文字列があります。この文字列を解析し、これらの数値をint、floatなどに格納する必要があります。したがって、
_String str = "100,2.0,-100,19.99,0";
_
分割後はInteger.parseInt()
とFloat.parseFloat()
でできます。しかし、私は負の数のためにそれをすることはできません。例外_Java.lang.NumberFormatException
_をスローします。 Webを検索した後、この問題の解決策が見つかりませんでした。
では、j2me api setを使用して、文字列から負の整数を解析し、intに格納するにはどうすればよいですか?
正の数と比較して負の数を解析することに特別なことは何もないはずです。
float f = Float.parseFloat("-1.0");
上記のコードは完全に正常に機能するはずです。
mightコードが間違っているのは、間違った小数点記号を使用してfloatを解析しようとしているということです。ロケールに小数点記号として.
がある場合、上記のコードは問題ありません。ただし、ロケールの小数点記号として,
がある場合、解析は失敗します(NumberFormatException
を使用)。
したがって、元の部分を正しく分割していること、および分割後の各部分が有効な形式(たとえば、正しい小数点記号を使用)であることを確認してください。
更新:
特定のロケールを使用して数値を解析する方法を知りたい場合は、たとえば この質問 を参照してください。
今日も同様の問題がありました。問題は、入力文字列のマイナス記号が実際にはmダッシュ文字であるということでした。それは厄介でした!だからそれは間違いなくチェックする価値があります。
明確化:そうですね、intとfloatを区別したいと思いました。 Float.parseFloat(..)
だけでも同様に機能し、contains
テストを行う必要はありません。 :) 誤読!
String str = "100,2.0,-100,19.99,0";
String[] ns = str.split(",");
for(String s: ns){
if(s.contains("."))
System.out.println("Float: "+ Float.parseFloat(s));
else
System.out.println("Int: "+ Integer.parseInt(s));
}
出力
Int: 100
Float: 2.0
Int: -100
Float: 19.99
Int: 0
更新だからこれ:
String str = "100,2.0,-100,19.99,0";
String[] ns = str.split(",");
for(String s: ns)
System.out.println("Float: "+ Float.parseFloat(s));
また動作します。
それは奇妙なことで、おそらくエンコーディングの問題です。 Integer.parseInt()は、正の数と負の数、および他の同様のメソッド(Float.parse ...)で機能するはずです。できることは、解析する前に常に符号「-」または「+」をチェックし、解析後に符号を割り当てることです。このメソッドには、「+」記号の付いた数値を受け取ったかのように、標準のInteger.parseIntが機能しないという利点があります。
区切り文字「、」で分割し、負の符号があるかどうかを確認できるので、数値に-1
を掛けるか、
Float parseFloat(str);
正常に動作します。