web-dev-qa-db-ja.com

j2me apiで負の数を含む文字列を解析する方法は?

数字のある文字列があります。この文字列を解析し、これらの数値をint、floatなどに格納する必要があります。したがって、

_String str = "100,2.0,-100,19.99,0";
_

分割後はInteger.parseInt()Float.parseFloat()でできます。しかし、私は負の数のためにそれをすることはできません。例外_Java.lang.NumberFormatException_をスローします。 Webを検索した後、この問題の解決策が見つかりませんでした。

では、j2me api setを使用して、文字列から負の整数を解析し、intに格納するにはどうすればよいですか?

8
masiboo

正の数と比較して負の数を解析することに特別なことは何もないはずです。

float f = Float.parseFloat("-1.0");

上記のコードは完全に正常に機能するはずです。

mightコードが間違っているのは、間違った小数点記号を使用してfloatを解析しようとしているということです。ロケールに小数点記号として.がある場合、上記のコードは問題ありません。ただし、ロケールの小数点記号として,がある場合、解析は失敗します(NumberFormatExceptionを使用)。

したがって、元の部分を正しく分割していること、および分割後の各部分が有効な形式(たとえば、正しい小数点記号を使用)であることを確認してください。

更新:
特定のロケールを使用して数値を解析する方法を知りたい場合は、たとえば この質問 を参照してください。

17
Julian

今日も同様の問題がありました。問題は、入力文字列のマイナス記号が実際にはmダッシュ文字であるということでした。それは厄介でした!だからそれは間違いなくチェックする価値があります。

2
jweile

明確化:そうですね、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));

また動作します。

1
Nishant

それは奇妙なことで、おそらくエンコーディングの問題です。 Integer.parseInt()は、正の数と負の数、および他の同様のメソッド(Float.parse ...)で機能するはずです。できることは、解析する前に常に符号「-」または「+」をチェックし、解析後に符号を割り当てることです。このメソッドには、「+」記号の付いた数値を受け取ったかのように、標準のInteger.parseIntが機能しないという利点があります。

0
Kris

区切り文字「、」で分割し、負の符号があるかどうかを確認できるので、数値に-1を掛けるか、

Float parseFloat(str);

正常に動作します。

0
JDC92