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
相关产品推荐
相关产品推荐

