将多数据类型文件读入Java中的ArrayList

时间:2014-11-07 22:22:16

标签: java arraylist

我正在尝试读取用户输入的文件,该文件包含数字和字符。我只想将数字存储在Arraylist中,但我一直卡住,帮助将非常感激。这就是我所拥有的。对不起,如果已经回答,我是网站的新手。

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

public class ArrayListClient {
  public static final int SIZE = 100;

  public static void main(String[] args) throws FileNotFoundException {
    String fileName, fileName2;

    UnorderedArrayList list1 = new UnorderedArrayList(SIZE);

    Scanner input = new Scanner(System.in);
    System.out.print("Please input the name of the file to be opened for the first list: ");
    fileName = input.nextLine();

    System.out.println();
    Scanner inputFile = new Scanner(new File(fileName));
    int num = inputFile.nextInt();

    while(inputFile.hasNextInt()) {
      int num2 = inputFile.nextInt();
      list1.insertEnd(num);
      num = num2;
    }
    list1.print();

 }         
}

输入文件为13 c v b 25 34 x x 67 56 10 a a 20 27 2 a s 5 1 45 59

2 个答案:

答案 0 :(得分:4)

您提供的循环是正确的,但您不需要在while循环之外使用此行:

int num = inputFile.nextInt();

如果您提供的文件没有Integer,那么这会导致您的程序崩溃。

我认为你可以简单地写这个并且应该有效:

while (inputFile.hasNextInt()) {
    int num = inputFile.nextInt();
    list1.insertEnd(num);
}

循环检查文件中是否还有另一个IntegerinputFile.hasNextInt()),然后将其添加到列表中(inputFile.nextInt())。

答案 1 :(得分:1)

这听起来像是一个家庭作业问题,所以我只是犹豫不决,只是给出了答案,但如果我是你,我会考虑编写一个过滤函数(如果你不得不考虑文件,那就把它变成一个懒惰的过滤器非常大/不适合内存)。你的过滤函数可以尝试Integer.parseInt(yourString);并捕获因尝试解析字母而发生的任何NumberFormatExceptions。这种方法具有使用异常来控制程序流的明显危险(通常被认为是不好的做法),但您不必遍历列表两次。

另一个显而易见的选择是编写一个过滤器来过滤字符,这样你只剩下数字字符串,然后在这些数字字符串上运行parseInt将它们变成整数值。如果性能是一个问题,你可以通过编写验证单个字符串值的函数来避免双遍遍列表(如果它不是数字则拒绝),然后如果它是一个数字则将其解析为int,然后添加解析在foreach循环中进入数组时整数。

由于整数检测内置于Scanner类中,并且Integer类包含parseInt()方法,因此您已经完成了大部分工作。只需改变你为每个循环定义的数组,你就可以了。