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

Java实现:按*分割文本文件内容到不同列表

搞定分组存储的小技巧

我来帮你解决这个分组存储的问题!其实核心思路就是跟踪当前所属的分组,遍历读取到的所有行时,遇到分组标记(也就是以* 开头的行)就切换分组,把后续的行都加到当前分组的列表里。

直接上代码,你可以把这段逻辑加到读取完所有行之后:

import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;

// 假设你已经把所有行读到了LinkedList<String> lines里
Map<String, LinkedList<String>> groupMap = new HashMap<>();
LinkedList<String> currentGroup = null;
String currentGroupName = null;

for (String line : lines) {
    // 判断当前行是否是分组开头(以"* "开头)
    if (line.startsWith("* ")) {
        // 如果之前已经有正在处理的分组,先把它存入Map
        if (currentGroup != null) {
            groupMap.put(currentGroupName, currentGroup);
        }
        // 提取分组名称:去掉开头的"* ",再去掉前后可能的空格
        currentGroupName = line.substring(2).trim();
        // 创建新的列表来存储当前分组的内容
        currentGroup = new LinkedList<>();
    } else {
        // 如果当前有正在处理的分组,就把这行加进去
        if (currentGroup != null) {
            currentGroup.add(line);
        }
    }
}

// 循环结束后,别忘了把最后一个分组也存入Map
if (currentGroup != null && currentGroupName != null) {
    groupMap.put(currentGroupName, currentGroup);
}

代码说明:

  • 用Map<String, LinkedList<String>>来存储所有分组,键是分组的名称(比如从* A line line提取出的"A line line"),值就是该分组对应的所有行列表。这样不管有多少个分组,都不用提前定义一个个单独的列表,非常灵活。
  • 遍历过程中,每次遇到新的分组标记,就把之前的分组存档,然后切换到新分组。
  • 最后一定要处理循环结束后的最后一个分组,因为它不会被循环里的存档逻辑处理到。

举个例子,如果你想获取A对应的行列表,直接用groupMap.get("A line line")就能拿到啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:48:53