从文本文件中读取整数并存储到数组中

时间:2014-01-23 06:02:46

标签: java arrays file-io java.util.scanner

我在阅读和存储文本文件中的整数时遇到问题。我正在使用一个int数组,所以我想这样做没有列表。我收到输入不匹配异常,我不知道如何纠正这个问题。正在读取的文本文件也包括字符串。

  public static Integer[] readFileReturnIntegers(String filename) {
     Integer[] array = new Integer[1000];
     int i = 0;
    //connect to the file
     File file = new File(filename);
     Scanner inputFile = null;
     try {
        inputFile = new Scanner(file);
     } 
     //If file not found-error message
        catch (FileNotFoundException Exception) {
           System.out.println("File not found!");
        }
    //if connected, read file
     if(inputFile != null){         
        System.out.print("number of integers in file \"" 
              + filename + "\" = \n");
        //loop through file for integers and store in array     
        while (inputFile.hasNext()) {
           array[i] = inputFile.nextInt();
           i++;
        }
        inputFile.close();
     }
     return array;
  }

3 个答案:

答案 0 :(得分:2)

在while循环中将hasNext()更改为hasNextInt()

答案 1 :(得分:2)

你可能会使用这样的东西(跳过任何非int),你应该关闭Scanner

// if connected, read file
if (inputFile != null) {
  System.out.print("number of integers in file \""
      + filename + "\" = \n");
  // loop through file for integers and store in array
  try {
    while (inputFile.hasNext()) {
      if (inputFile.hasNextInt()) {
        array[i] = inputFile.nextInt();
        i++;
      } else {
        inputFile.next();
      }
    }
  } finally {
    inputFile.close();
  }
  // I think you wanted to print it.
  System.out.println(i);
  for (int v = 0; v < i; v++) {
    System.out.printf("array[%d] = %d\n", v, array[v]);
  }
}

答案 2 :(得分:0)

你需要做的是在获得一个新值并尝试将它放入你需要检查的数组中以确保它实际上是一个int,如果它不是,那么跳过它并继续前进到下一个值。或者,您可以创建所有值的字符串数组,然后仅将整数复制到单独的数组中。但是,第一种解决方案可能是两者中较好的一种。

另外......正如评论中提到的那样,它更容易以字符串形式读取整数,然后解析它们的值...