如何从列表中构建数组? (没有ArrayList)

时间:2014-05-20 03:26:07

标签: java arrays list file

我试图从一个文件中构建一个数组,该文件列出了43个国家/地区以及其各自的4个其他特定信息字段。我得到了代码,我必须阅读代码(使用echo print验证),但我不知道如何处理其余代码,以便我可以在输出方面得到一些结果。

 public static void main(String[] args) throws IOException {
    // TODO code application logic here

        String inputString = null; 
        String cName;
        String cCapital;
        String regionNum;
        int capitalPop;
        int region;

        File f = new File("Countries.txt"); 
        FileReader fr = new FileReader(f); 
        BufferedReader br = new BufferedReader(fr); 


        while (inputString != null)
        { 
            cName = inputString.substring(0, 15).trim();
            cCapital = inputString.substring(15, 30); 
            capitalPop = Integer.parseInt(inputString.substring(55, 60));

            inputString = br.readLine(); 

        }

        br.close(); 
        fr.close(); 
}

while循环中的三行具有用于从文件行中剪裁的样本值。我认为我的主要问题是我在概念上感到困惑。任何输入都表示赞赏。谢谢

3 个答案:

答案 0 :(得分:2)

我们都没有在您的代码中看到List,但这是应该如何完成的:

您需要创建一个ArrayList,然后为其添加每个国家/地区的对象。如果国家/地区的数量始终固定为43,则可以直接使用数组。

public static void main(String[] args) throws IOException {
    // TODO code application logic here

        String inputString = null; 
        String cName;
        String cCapital;
        String regionNum;
        int capitalPop;
        int region;

        File f = new File("Countries.txt"); 
        FileReader fr = new FileReader(f); 
        BufferedReader br = new BufferedReader(fr); 
        List<Country> countries = new ArrayList<Country>();
        inputString = br.readLine();    
        while (inputString != null)
        { 
            cName = inputString.substring(0, 15).trim();
            cCapital = inputString.substring(15, 30); 
            capitalPop = Integer.parseInt(inputString.substring(55, 60));
            Country country = new Country();
            country.setCName(cName);
            // set other members
            countries.add(country); // This is your list of countries
            inputString = br.readLine();    
        }
        Country[] countryArray = new Country[countries.size()];
        countries.toArray(countryArray);
        // voila.. the country array.
        br.close(); 
        fr.close(); 
}


public class Country {

 private String cName;
 private String cCapital;
 //.. other fields;


 public String getCName(){ return this.cName;}
 public void setCName(String cName) {this.cName = cName;}
 // create other setters / getters for each of the member variables.
}

答案 1 :(得分:1)

我的代码中没有看到List对象...但是要获取一个List并将其放入数组中调用toArray()方法,请参阅api文档 http://docs.oracle.com/javase/8/docs/api/java/util/List.html

答案 2 :(得分:0)

我会阅读有关CSV文件(逗号分隔值或逗号分隔值)以及从中读取它们的常用方法。诸如扫描程序之类的类可以按特定值分隔每个读取行,因此您可以依赖该分隔符而不是明确说明字符的长度。根据文件在文件中的组织方式,这可能更有效,更明智。此外,您的分隔符可以是任何字符串,最常见的是“,”。

另外,我将定义一个类,它保存您需要存储的值,并创建一个包含数据的类型的数组。然后,您可以稍后回读该数组并调用您为其定义的toString()方法来打印存储的值。