java - 计算列数据

标签 java csv

我正在尝试创建一个 void 方法,该方法将读取 csv 文件并计算状态的信誉数,例如 TX 次数、Oh 次数和 Dc 次数。输出应该是-TX=4;哦=2;DC=2。但我的输出是“对于输入字符串:“F”” - 我真的不知道问题出在哪里。有人可以帮助我吗?

“Crimerate.csv”

州县费率

德克萨斯州,达拉斯,39

德克萨斯州,阿德森,10

哦,阿彻,20

直流,直流,50

德克萨斯州,休斯顿,31

TX,克劳德,13

哦,贝克萨,10 直流,SE,40

public static void countnumber()

{

        try{

    List<String>number=Files.readAllLines(Paths.get("Crimerate.csv"));


            double sum=0,num=0;

            for (String line:number){

                if(num==0){

                    ++num;

                    continue;

                }

                line=line.replace("\"","");

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



                double close = Double.parseDouble(result[6]);

                String numberAsString = Double.toString(close);



                if(numberAsString.equals("Tx"))
                {
                    sum++;
                    System.out.println("number of Tx =" + sum);
                }
                else if(numberAsString.equals("Oh"))
                {
                    sum++;
                    System.out.println("number of Oh =" + sum);
                }
                else if(numberAsString.equals("Dc"))
                {
                    sum++;
                    System.out.println("number of Dc =" + sum);
                }
                }

        }catch(Exception e){
            System.out.println(e.getMessage());

        }
    }


public static void main (String args[])

{

countnumber();

}

最佳答案

虽然之前建议的答案将解决为什么只有一个响应(只有一个 sum 变量的结果)的具体问题,但它们有两个问题。

  • 它们没有考虑到以下事实:在示例数据中,德克萨斯州同时显示为“Tx”和“TX”。因此,当前的其他答案不会给出德克萨斯州 4 的正确结果(它们只会显示 2)。
  • 这些方法假设显示了完整的数据集。如果存在其他状态,则需要不断扩展代码以支持新状态。

此解决方案可以处理这两种情况。

public static void main(String[] args)
{
    Map<String, Integer> countByState = new HashMap<>();
    List<String> number;
    try {
        number = Files.readAllLines(Paths.get("f:/tmp/Crimerate.csv"));

        int cntr = 0;
        for (String line : number) {
            // skip first line
            if (cntr++ == 0) {
                continue;
            }
            String []result=line.split(",");   

            // should add error checking
            String state = result[0].toUpperCase();

            Integer cnt = countByState.get(state);
            if (cnt == null) {
                cnt = new Integer(0);
            }
            countByState.put(state, ++cnt);

        }            

        System.out.println(countByState);
    }
    catch (IOException e) {
        e.printStackTrace();
    }
}

基于问题中提供的数据的示例结果(该数据中只有一个 DC):

{TX=4, OH=2, DC=1}

关于java - 计算列数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36800045/

相关文章:

java - LinearLayout 在小型设备中没有响应

java - 是否可以告诉编译器一个方法总是抛出一个异常

python - 如何使用 Python CSV Writer 保留尾随零

Java:使用 Jackson 将 CSV 转换为 XML

r - 读取 CSV 时自动将 NA 转换为 0

excel VBA,在将多个 CSV 文件复制到一个工作簿时,在单元格中创建一个包含工作表或文件名的列

excel - 使用 powershell 将多个 xls 转换为 csv

java - 使用多个 java 概念的箭头悲伤游戏

java - 验证@ScriptAssert 可以访问静态方法

java - 在 Maven 项目的模块内共享类