你怎么从文本文件中读取所有双打?

时间:2014-07-31 23:06:58

标签: java io java.util.scanner

拥有所有双打文件时很容易,但是什么时候 介于两者之间的非双重, 我无法捕捉到所有这些。

例如:

604.2
609.2
6042
604.4
4234.324
312
gfsdgfreg
6043
604.3

输出:

604.2
609.2
6042.0
604.4
4234.324
312.0

显然,缺少两个双打。有办法吗? 通过使用hasNextDouble()来捕获所有这些? 如果你没有得到回复,请提前。我在某处看到了 我可以解析他们每个人加倍并抓住 例外,但我真的不是那么高级

我在这里有:

import java.util.*;
import java.io.*;

public class Lab11{

   public static void main(String[] args)
   throws FileNotFoundException{

      File nums = new File("file.txt");
      int size = arrSize(nums);

      double[] phoneNums = copy(nums,size);
      for(int i=0;i<phoneNums.length;i++)
         System.out.println(phoneNums[i]);
    }

    public static int arrSize(File f)
    throws FileNotFoundException{
       int arrSize = 0;
       Scanner in = new Scanner(f);
       while(in.hasNextDouble()){
          arrSize++;
          in.next();
       }
       in.close();
       return arrSize;
    }

    public static double[] copy(File f,int size)
    throws FileNotFoundException{
       Scanner in =  new Scanner(f);
       double[] list = new double[size];
       int i = 0;
       while(in.hasNextDouble()){
          list[i++] = in.nextDouble();
       }
       in.close();
       return list;
    }
}

3 个答案:

答案 0 :(得分:2)

因为您正在使用

while(in.hasNextDouble()){
    arrSize++;
    in.next();
}

一旦达到非双倍,它就会停止,并且不会继续前进。 您必须循环遍历while循环中的每一行,并且在此循环中,使用if语句检查您正在阅读的内容是否为双倍。

答案 1 :(得分:2)

我会给你的两个while循环以下结构:

while(in.hasNext()) {
  if(in.hasNextDouble()) {
     // your inner while loop code here
  } else {
     in.next();
  }
}

否则,您将在第一次非双重实例后错过任何内容。

答案 2 :(得分:1)

就像Takendarkk所说的那样,一旦输入in.hasNextDouble()中发现非双重将被评估为false,结束你的循环。

以下是一个(希望)更简化的方式来做你正在做的事情的例子:

    // create a new list for our doubles
    List<Double> doubles = new LinkedList<>();
    try {

        // open our doubles file reader
        BufferedReader reader = Files.newBufferedReader(Paths.get("doubles.txt"), Charset.defaultCharset());

        // read our doubles file
        String line;
        while ((line = reader.readLine()) != null) {
            if (line.matches("^[0-9]*(\\.[0-9]+)?$")) {
                doubles.add(Double.parseDouble(line));
            }
        }

        // close our doubles file reader
        reader.close();
    } catch (IOException e) {
        e.printStackTrace(); // for the sake of the example
    }

    // output our doubles
    for (Double d : doubles) {
        System.out.println("Double: " + d);
    }

希望这有帮助