如何从包含双精度和字符串的文本文件中打印双打?

时间:2016-04-12 21:12:00

标签: java arrays parsing double

我正在尝试获取下面的文本文件并仅获取第一列数字以进行平均。然而,我甚至无法打印数字,因为文本文件中还有双字符串之前的字符串,使我的nextLong()立即失败。 我到目前为止的代码如下:

import java.io.*;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class cancer{

public static void main(String[] args) throws InputMismatchException, FileNotFoundException {
    Scanner inFile = new Scanner(new FileReader("trainingDataset.txt"));
    inFile.useDelimiter(",");
    List<Float> arr=new ArrayList<Float>();
     while(inFile.hasNext()){
         float token1 = inFile.nextFloat();
            arr.add(token1);
            }
     inFile.close();
     Float[] tempsArray = arr.toArray(new Float[0]);
        for (Float s : tempsArray) {
          System.out.println(s);
        }
}

}

但我得到了这个输出:

Exception in thread "main" java.util.InputMismatchException
    at java.util.Scanner.throwFor(Unknown Source)
    at java.util.Scanner.next(Unknown Source)
    at java.util.Scanner.nextFloat(Unknown Source)
    at cancer.main(cancer.java:13)

我知道我收到此错误是因为双打前的字符串。我需要得到数字,以便我可以平均它们,我不知道如何。请帮助!

这是文本文件: [trainingDataset.txt]  http://txt.do/5w3em

2 个答案:

答案 0 :(得分:1)

只需忽略第一个值不是数字的行。即将每行读作字符串而不是浮点数,然后尝试将该行转换为浮点数。如果由于numberformatexception而失败,则忽略该行并移动到下一行。

答案 1 :(得分:0)

您的文件看起来像CSV(逗号分隔值)文件。您可以执行以下操作:

  1. 从文件中删除评论(以&#34; //&#34开头的那些行;)。
  2. 尝试使用任何CSV解析器(例如:     https://commons.apache.org/proper/commons-csv/apidocs/org/apache/commons/csv/CSVParser.html)。