1

文字列の配列リストをfloatの配列リストに変換しようとしています。私は2つをそのように宣言しました:

ArrayList<Float> AFFloat = new ArrayList<Float>();
ArrayList<String> AFUni0 = new ArrayList<String>();

AFUniは、ファイルから解析された配列リストです。次のような値を保持します。

[0.059、0.059、0.029、0.412、0.029、0.452、0.386、0.432、0.114、0.318、0.159、0.045、0.432、0.477、0.045 ...]

このコードセットを使用して、これらの文字列値を実際の数値にしようとしています。

for (String wntFl:AFUni0){
  AFFloat.add(Float.valueOf(wntFl));
}

しかし、何らかの理由でそれは機能していません。このエラーで戻ってきます:

java.lang.NumberFormatException: For input string: "0.114,0.318"
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
    at java.lang.Float.valueOf(Float.java:388)
    at allelefreq.AlleleFreq.main(AlleleFreq.java:122)

なぜこれが起こっているのか誰かが知っていますか?ありがとう

4

8 に答える 8

3

一部の値は「、」で区切られているように見えますが、他の値は、例のように「、」でのみ区切られています。これが認識の失敗の理由である可能性があります。

于 2012-09-24T13:54:46.397 に答える
2

答えはあなたの例外にあります

java.lang.NumberFormatException: For input string: "0.114,0.318"

"0.114,0.318"asを渡すのでwntFl、NUmberFormatExceptionが発生します

入力が有効であることを確認する必要があります。

最初に入力を分割する必要があり、次にそれを解析できます。

于 2012-09-24T13:57:12.180 に答える
1

エラーメッセージに示されているように、失敗している値は"0.114,0.318"(つまり、NOT"0.114"または。です"0.318"が、1つに複数の数値が含まれていますString)、これは有効な数値ではありません。ただしArrayList、を入力している場合は、1つので複数の値を取得していますString。これを修正するには、配列にデータを入力するコードを修正するか、を使用String.split(",")して値の配列を取得し、floatにキャストする前にその配列をループします。

于 2012-09-24T13:56:14.660 に答える
0

0.114,0.318は有効なフロートではありません(Observe、in between), that is whyNumberFormatException`

split()最初に配列を返す文字列を返し、次に値をFloat.valueOf(str[i])に渡す必要がある場合があります。

于 2012-09-24T13:54:16.110 に答える
0

セパレータは、すべての文字列ストリームで完全に一定ではありません。この方法で問題を見つけてください。

于 2012-09-24T13:56:10.903 に答える
0

は有効なフロートではないString.split(",")ため、使用する必要があります0.114,0.318

于 2012-09-24T13:56:29.073 に答える
0

分割を正しく行いません。この種のプロジェクトは非常にうまく機能します(ただし、その単なる例です)

public static void main(String[] args) {
        // TODO Auto-generated method stub
        ArrayList<Float> floats = new ArrayList<Float>();
        ArrayList<String> strings = new ArrayList<String>();

        strings.add("0.123");
        strings.add("1.123");
        strings.add("0.423");
        strings.add("34.423");
        strings.add("0.000");

        for(String str : strings) {
            floats.add(Float.valueOf(str));
        }

        for(Float fl : floats) {
            System.out.println(fl);
        }

    }
于 2012-09-24T14:04:53.503 に答える
0

Internationalizationこれが/の理由である可能性がありますLocalization。多くの言語.では、,/،

スペイン語と同じように http://translate.google.com/#auto/es/10.1

またはアラビア語でhttp://translate.google.com/#auto/ar/10.1

文字列からフロートへの変換の場合は、ローカリゼーションに注意する必要があります。

于 2012-09-25T07:39:52.167 に答える