You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将CSV每行文本导入ArrayList<String>并通过StringTokenizer统计交易

解决方法

1. 给getTokens()传参

在main方法最后一行,把存好数据的ArrayList传进去:

getTokens(list);

2. 实现带参数的getTokens()方法

方法需要接收ArrayList<String>类型的参数,遍历每一行数据,用StringTokenizer拆分CSV字段,统计交易类型。示例代码如下(记得根据你的CSV结构调整交易类型所在的列索引):

public static void getTokens(ArrayList<String> transactionLines) {
    int total = transactionLines.size();
    int debitNum = 0;
    int creditNum = 0;

    for (String line : transactionLines) {
        // 用逗号拆分CSV行
        StringTokenizer tokenizer = new StringTokenizer(line, ",");
        String transType = "";
        int colIndex = 0;

        // 遍历拿到交易类型对应的列(假设是第3列,自己改数字)
        while (tokenizer.hasMoreTokens()) {
            colIndex++;
            String token = tokenizer.nextToken().trim();
            if (colIndex == 3) {
                transType = token;
                break;
            }
        }

        // 统计借记/贷记
        if ("DEBIT".equalsIgnoreCase(transType)) {
            debitNum++;
        } else if ("CREDIT".equalsIgnoreCase(transType)) {
            creditNum++;
        }
    }

    // 输出结果
    System.out.println("交易总数:" + total);
    System.out.println("借记交易:" + debitNum + " 笔");
    System.out.println("贷记交易:" + creditNum + " 笔");
}

3. 优化原main方法的小问题

原代码有几个可以改进的地方,比如Scanner的定义、资源关闭,还有交易数可以直接用list的size()获取:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.StringTokenizer;

public class CreditCardStats {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        Scanner s = null;

        try {
            s = new Scanner(new File("visadata.csv"));
            // 直接循环读取所有行
            while (s.hasNextLine()) {
                list.add(s.nextLine());
            }
            System.out.println("There are " + list.size() + " transactions");
        } catch (FileNotFoundException e) {
            System.out.println("File Not Found");
        } finally {
            // 记得关闭Scanner
            if (s != null) {
                s.close();
            }
        }

        getTokens(list);
    }

    // 把上面的getTokens方法放在这里
    public static void getTokens(ArrayList<String> transactionLines) {
        // ... 实现代码
    }
}

注意事项

  • 一定要根据你的visadata.csv实际列顺序,修改colIndex == 3中的数字,确保能正确拿到交易类型字段。
  • 如果你的CSV字段里包含逗号(比如带双引号的内容),StringTokenizer可能会拆分出错,这种情况建议用专门的CSV解析工具,但简单场景下StringTokenizer足够用。

内容的提问来源于stack exchange,提问作者Kyle Tse

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 14:05:41