根据表头读取表头对应列的数据(文本文件)

代码如下:

/**
	 * 功能描述: 根据输入表头读取对应列的数据
	 *
	 * @param filepath   filepath
	 * @param headerList 标题列表
	 * @return {@link Map }<{@link String }, {@link List }<{@link String }>>
	 * @author songxy
	 * @date 2024/02/27 17:02:58
	 */
	public Map<String, List<String>> get(String filepath, List<String> headerList){
		FileReader fileReader = new FileReader(filepath, "GBK");
		List<String> dataList = new ArrayList<>();
		fileReader.readLines(dataList);
		String headerStr = dataList.get(0);
		//key =  表头,value = 表头所在列的所有数据
		Map<String, List<String>> dataMap = new HashMap<>();
		List<String> listStr = StrSplitter.splitByRegex(headerStr, "[\\s+]", 0, true, true);
		// 构建表头与索引的映射关系
		Map<String, Integer> headerMap = new HashMap<>();
		for (int i = 0; i < listStr.size(); i++) {
			headerMap.put(listStr.get(i), i);
		}
		// 遍历需要的列,从数据中提取相应列的信息
		for (String s : headerList) {
			if (headerMap.containsKey(s)) {
				int index = headerMap.get(s);
				List<String> headersDataList = new ArrayList<>();
				for (int i = 1; i < dataList.size(); i++) {
					List<String> splitData = StrSplitter.splitByRegex(dataList.get(i), "[\\s+]", 0, true, true);
					if (index < splitData.size()) {
						headersDataList.add(splitData.get(index));
					}
				}
				dataMap.put(s, headersDataList);
			}
		}
		return dataMap;
	}

使用示例:

需要读取改文件的 `日期 时间 站点A 站点C 站点E`几列

测试代码:

public void getStr() {
		String filePath = "C:\\Users\\song\\Desktop\\***.txt";
		String h1 = "Year-MM-DD";
		String h2 = "HH:MM";
		String h3 = "站点A";
		String h4 = "站点C";
		String h5 = "站点E";

		List<String> headerList = new ArrayList<>();
		headerList.add(h1);
		headerList.add(h2);
		headerList.add(h3);
		headerList.add(h4);
		headerList.add(h5);

		Map<String, List<String>> stringListMap = get(filePath, headerList);
		String jsonStr = JSONUtil.toJsonStr(stringListMap);
		System.out.println(jsonStr);

	}

打印结果:

{
    "HH:MM": [
        "08:00",
        "09:00",
        "10:00",
        "11:00",
        "12:00",
        "13:00"
    ],
    "Year-MM-DD": [
        "2021-07-01",
        "2021-07-01",
        "2021-07-01",
        "2021-07-01",
        "2021-07-01",
        "2021-07-01"
    ],
    "站点C": [
        "2.70000E",
        "2.56778E",
        "2.11383E",
        "1.80829E",
        "1.69840E",
        "1.94967E"
    ],
    "站点A": [
        "2.70000E",
        "1.80066E",
        "1.28611E",
        "1.18200E",
        "1.62613E",
        "2.59689E"
    ],
    "站点E": [
        "2.70000E",
        "2.64282E",
        "2.29670E",
        "1.98304E",
        "1.82195E",
        "1.88940E"
    ]
}


 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值