【问题标题】:How do i populate an array from a txt file when i have to use file reader Java??当我必须使用文件阅读器 Java 时,如何从 txt 文件填充数组?
【发布时间】:2013-05-13 13:33:07
【问题描述】:

我必须用文本文件中的整数填充一个数组,我需要文件阅读器从每一行中获取一个整数并放入一个数组中,但它也不能将重复项放入数组中,这使得它甚至更复杂,而且重复,我必须将它们写入另一个文本文件,例如:sorted.txt,我无法弄清楚如何在我大学的第一年做所有这些。如果有人可以提供帮助将不胜感激。提前谢谢你

这是我迄今为止在我的方法中得到的结果

public static void readFromfile()throws IOException {
    List<String> lines = new ArrayList<String>();
    BufferedReader reader = null;
    try {
     reader = new BufferedReader(new FileReader("file.txt"));
     String line = null;
     while ((line = reader.readLine()) != null) {
        lines.add(line);
    }
} finally {
    reader.close();
}
int[] array = lines.toArray();// i keep getting incopatible type error in this line
awell

在过去的 6 天里,我一直在做这件事,这就是我取得的成就:(

【问题讨论】:

  • 文本文件中的每一行包含 1 个 int?
  • 第一个错误是您尝试将字符串列表转换为 int 数组:int[] array = lines.toArray();

标签: java arrays filereader


【解决方案1】:
int[] array = lines.toArray();// i keep getting incopatible type error in this line

当然可以,List&lt;String&gt;#toArray 返回 Object[],而不是 int[]。 :-)

理想情况下,您可以通过将列表声明为List&lt;int&gt;(或List&lt;long&gt;,如果数字真的很大)来做到这一点。不幸的是,至少在 Java 6 中,你不能这样做,你必须使用 List&lt;Integer&gt; / List&lt;Long&gt; 来代替。这就是你的出发点。

然后解析字符串中的数字(例如,来自line)。 Integer.parseInt(或Long.parseLong)可以为你做解析。它们的结果分别为intlong,但添加到列表时会自动装箱。

或者,您可以查看Scanner class,它是“...一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串...”

List&lt;Integer&gt; 列表中获取int[] 的最终数组(例如)有点麻烦。如果您可以使用 Integer[] 代替(而且由于自动装箱/拆箱,您大部分都可以),这很容易:Integer[] numbers = yourList.toArray(new Integer[yourList.size()]);

如果您确实需要 int[],则必须编写一个循环来复制它,或者使用类似 Apache Commons toPrimitive method 的东西。

【讨论】:

    【解决方案2】:

    使用 Scanner 类会让事情变得更简单。

    List<Integer> numbers = new ArrayList<Integer>();
    Scanner s = new Scanner(new FileInputStream("file.txt"));
    
    while (s.hasNextInt()) {
       numbers.add(s.nextInt());
    }
    

    【讨论】:

      【解决方案3】:

      您的问题是您有一个List of Strings,并且您试图将其转换为int array

      作为 T.J. Crowder 指出,但是你不能有 List&lt;int&gt; - 你必须使用包装类 Integer

      所以把你的列表改成List&lt;Integer&gt;,然后就是lines.add(Integer.parseInt(line));

      【讨论】:

        【解决方案4】:

        我推荐使用 Scanner 类,它比你做的更容易。 错误是由于将对象分配给整数类型。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-02-23
          • 2022-01-19
          • 1970-01-01
          • 1970-01-01
          • 2019-07-19
          相关资源
          最近更新 更多