代码如下:
/**
* 功能描述: 根据输入表头读取对应列的数据
*
* @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"
]
}