2017-04-02 96 views
0

我在理解Java如何使用Scanner读取文件中的行以及希望在混淆日子后得到一些解释方面遇到一些困难。使用扫描仪读取文件

我有一个包含一个名称,然后5双打一行.txt文件。我试图弄清楚如何将每个变量分配给循环中的变量,以便我可以处理数据。我的目标是从这些行中实际获取数据,并将它们作为参数传递给另一种验证方法,因此如果有更简单的方法可以做到这一点,那么我就是所有人。我觉得我无法找到一种方法来迭代nextLine中的每一件事,只是遍及整条线本身。我正在尝试在不使用数组的情况下执行此操作,以下是我现在使用的相关代码片段。

Scanner inputFile = new Scanner(file); 

while (inputFile.hasNext()) 
    { 
     String line = ""; 
     accumulator++; 
     Scanner split = new Scanner(inputFile.nextLine()); 

     while (split.hasNext()) 
     { 

     } 



     stockName = inputFile.next(); 
     shares = inputFile.nextDouble(); 
     purchasePrice = inputFile.nextDouble(); 
     purchaseCommission = inputFile.nextDouble(); 
     salesPrice = inputFile.nextDouble(); 
     salesCommission = inputFile.nextDouble(); 

     System.out.println(stockName); 
     System.out.println(shares); 
     System.out.println(purchasePrice); 
     System.out.println(purchaseCommission); 
     System.out.println(salesPrice); 
     System.out.println(salesCommission); 


     System.out.print(line); 
     System.out.println(""); 
     // checkValidity(line); 
    } 

我有一个很难提出和阐明什么,我不知道,所以任何和所有帮助感激......我字面上一直在这三天我在一堵墙上。

编辑:

文本文件的布局看起来像这样

DELL: Dell Inc 
125 25.567 0.025 28.735 0.025 
MSFT: Microsoft 
34.1 -15.75 0.012 15.90 0.013 

回答

1

你几乎没有。您需要删除该行:

while (split.hasNext()) 
{ 

} 

这将消耗所有给予拆分的元素。您需要将此分配给所有的元素,如stocksalesPrice

因此,外内新的代码段while循环

stockName = inputFile.nextLine(); 
    Scanner split = new Scanner(inputFile.nextLine());   

    shares = split.nextDouble(); 
    purchasePrice = split.nextDouble(); 
    purchaseCommission = split.nextDouble(); 
    salesPrice = split.nextDouble(); 
    salesCommission = split.nextDouble(); 

因为,你是逐行读取线,也确保外部while循环看起来像:

while (inputFile.hasNextLine()) { 

} 
+0

该文件实际上是布局,以便名称在一行,下一行是我需要的所有数据。我尝试将stockName切换到split.nextLine(),但是它会为NoSuchElementException引发关于下一行(份额)的错误。任何想法为什么?不应该stockName只消耗整条线,然后自动移动到下一行? – Josh

+0

@Josh在您的评论后编辑 – bsd