2012-09-24 55 views
1

我正在尝试将字符串数组列表变成浮点数组列表。我已经声明了这两个:Java字符串浮动

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) 

有没有人知道这是为什么发生? 感谢

+2

那'String'值包含*两个*浮点值,你没有做正确的分裂,似乎。 –

回答

3

它看起来像某些值用“,”隔开,而其他的,如你的例子,只用“,”。这可能是认识失败的原因。

0

0.114,0.318不是有效的浮点数(注意,in between), that is why NumberFormatException`

您可能需要先split()返回数组中的字符串,然后将值传递给Float.valueOf(str[i]

+0

啊,是的,这将解释它。我不知道我是如何忽略这一点的。谢谢! – Stephopolis

0

分隔符在所有字符串流中都不是很稳定。尝试以这种方式找到问题。

1

随着错误消息告诉您,它的失败上的值是"0.114,0.318"(即不"0.114""0.318",但多个号码在一个String),这不是一个有效的数字。然而,您正在填充您的ArrayList,因此您在单个String中获得多个值。您可以通过修复填充数组的代码或使用String.split(",")来获取值的数组并在循环播放之前循环修复此问题。

0

你应该使用String.split(",")因为0.114,0.318是不是一个有效的float

2

答案就在你的异常

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

您传递"0.114,0.318"wntFl,这就是为什么你必须NumberFormatException的

你应该确保你的输入是有效的。

首先你应该拆分输入,然后你可以解析它。

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); 
     } 

    }