【问题标题】:Java read text file using java I/O imports, and summing certain integer columns?Java 使用 java I/O 导入读取文本文件,并对某些整数列求和?
【发布时间】:2015-07-24 16:16:23
【问题描述】:

我必须读取一个包含多列的文本文件,第一列是州号,(01-50)第二列是某个住房位置的名称,第三列是每个城镇的总人口住房位置在,第 4 列是可能的住房容量数量,第 5 列是前一列的可用住房数量。第 6 列和第 7 列有无用的 ID 号和日期。每个州都有多个住房地点。

目标是创建一个新的输出,每个状态有 1 行。第 1 列必须是州编号,第 2 列必须是给定每个城镇人口的每个州的总人口,第 3 列必须是可能的住房容量总数,第 4 列必须是总可用性,第 5 列必须是可用性百分比。

这是我目前的代码:

import java.io.*;
public class housing
{
    public static void main(String[] args)
    {
        String fileName="housingdata.txt";
        try
        {
            FileReader File = new FileReader(fileName);
            BufferedReader reader = new BufferedReader(File);
            String line;

                while ((line = bufferReader.readLine()) != null)
                {
                    System.out.println(line);
                }
            }
        }
        catch(Exception)
        {
           System.out.println("Error.");
        }
    }

}

如您所见,此代码会加载文本文件,但我不确定如何根据需要开始对每列进行操作。我是Java的新手。感谢您提供的任何帮助。谢谢!

【问题讨论】:

    标签: java text io


    【解决方案1】:

    文件中已有一行,您需要从中“解析”值。

    通常使用逗号 (,) 或分号 (;) 等分隔符

    可以按分隔符分割:

    String[] columns = line.split(",");
    

    然后你可以遍历数组:

    for(int i = 0; i < columns.length; i++) {
     System.out.println(columns[i]);
    }
    

    然后在 for 循环中开始你的操作。

    【讨论】:

    • 这一行分隔列是一个空格,有时是多个空格,这看起来如何?
    • 另外我该如何开始操作?你能详细说明吗? @Stefan
    【解决方案2】:

    此时,当你有一条线时,你开始用你拥有的一些分隔符分割线,得到列值的数组。之后,你可以为所欲为。

    更新 1. 这真的很脏,但你应该明白其中的逻辑 2.你已经开始谈论你提取的数据的聚合,如果你想更进一步,你最好使用一些轻量级的sql数据库解决方案。这将简化很多事情。

    ...
    HashMap<String,Integer> agregatedData = new HashMap<>();
    ...
    {
     System.out.println(line);
     String[] splittedLine = line.split(",");  \\ Assume delimiter is coma
    
     System.out.println("State number : "+splittedLine[0]);
     System.out.println("Housing name : "+splittedLine[1]);
     System.out.println("Population : "+);
    
     if(agregatedData.containsKey(splittedLine[0])){
          //If we already have some population for this state, do summation
          int v = agregatedData.get(splittedLine[0]) ;
          agregatedData.put(splittedLine[0],Integer.parseInt(splittedLine[2]) + v);
          }else{
          //If there is no record with such  state code yet, add new one
          agregatedData.put(splittedLine[0],Integer.parseInt(splittedLine[2]));
          }
    
                }
    

    【讨论】:

    • 谢谢,怎么说呢,为州 01 的住房人口添加人口?
    • 感谢您的回复,很遗憾我无法使用 hashmap 函数。有没有其他选择?
    猜你喜欢
    • 2012-07-05
    • 2018-04-27
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2020-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-20
    相关资源
    最近更新 更多