java file int array read



我想从文件中获取一个整数数组。但是当我得到一个数组时,数组中不需要的零,因为大小为 10,而 file(18,12,14,15,16) 中只有 5 个整数。如何删除这些零。代码是:

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class TxtFile {
public static void main(String[] args) {
    // TODO Auto-generated method stub
    File inFile=new File("H:\Documents\JavaEclipseWorkPlace\ReadTextFile\src\txt.txt");
    Scanner in=null;
    int []contents = new int[10];
    int i=0;
    try {
        in=new Scanner(inFile);
        while(in.hasNextInt()){
             contents[i++]=in.nextInt();
        }
        System.out.println(Arrays.toString(contents));
    }
    catch(IOException e){
        e.printStackTrace();
    }
    finally{
        in.close();
    }
}

}

输出为:[18, 12, 14, 15, 16

, 0, 0, 0, 0, 0].

这是因为您分配了一个大小为 10 的数组,并且默认情况下这些值初始化为 0。然后你从文件中读取 5 个值,这只会覆盖数组中的前 5 个值,未触及的 0 仍然存在。

您有以下几种选择:

您可以计算从文件中读取的值的数量,然后调整数组的大小以匹配,例如:

while(in.hasNextInt()){
    contents[i++]=in.nextInt();
}
// 'i' now contains the number read from the file:
contents = Arrays.copyOf(contents, i);
// contents now only contains 'i' items.
System.out.println(Arrays.toString(contents));

您可以计算从文件中读取的值的数量,然后只显式打印这么多值,例如:

while(in.hasNextInt()){
    contents[i++]=in.nextInt();
}
// 'i' now contains the number read from the file:
for (int n = 0; n < i; ++ n)
    System.out.println(contents[n]);

您可以使用像 ArrayList<Integer> 这样的动态容器,只需在读取值时向其添加值即可。然后,您可以自动支持文件中的任何数字,例如:

ArrayList<Integer> contents = new ArrayList<Integer>();
...
while(in.hasNextInt()){
    contents.add(in.nextInt());
}
System.out.println(contents);

我推荐第三种选择。这是最灵活和最容易处理的。

将输入文件读入ArrayList<Integer>然后调用 toArray 返回整数数组

你可以为此使用动态向量

import java.io.File;
import java.io.IOException;
import java.util.*;
class St{
 public static void main(String args[]){
 File inFile=new File("H:\Documents\JavaEclipseWorkPlace\ReadTextFile\src\txt.txt");
Scanner in=null;
Vector<Integer> arr=new Vector<Integer>(5,2); //5 is initial size of vector, 2 is increment in size if new elements are to be added
try {
    in=new Scanner(inFile);
    while(in.hasNextInt()){
         arr.addElement(in.nextInt());
    }
arr.trimToSize(); // This will make the vector of exact size
    System.out.println(arr.toString());
}
catch(IOException e){
    e.printStackTrace();
}
finally{
    in.close();
}
}
}

相关内容

  • 没有找到相关文章

最新更新