1

我正在尝试将字符串数组列表转换为浮点数组列表。我已经声明了这两个:

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",但一个中的多个数字String),这不是有效数字。无论您如何填充ArrayList,您都会在一个String. 您可以通过修复填充数组的代码或String.split(",")用于获取值数组并在转换为浮点数之前循环该数组来解决此问题。

于 2012-09-24T13:56:14.660 回答
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 回答
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

0.114,0.318不是有效的浮点数(观察,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 回答