本文介绍如何从文件中逐行读取卡片数据(数值+花色),按顺序构造card对象,并将它们交替分配到两个独立列表中,适用于需要分组处理的场景。
本文介绍如何从文件中逐行读取卡片数据(数值+花色),按顺序构造card对象,并将它们交替分配到两个独立列表中,适用于需要分组处理的场景。
在实际开发中,我们常需解析结构化文本文件并按规则分发数据。例如,给定一个以行组织的卡片文件:首行为总数量,随后每两行为一张卡(数值 + 花色),要求将第1、3、5…张卡放入 listA,第2、4、6…张卡放入 listB——即按卡片序号奇偶性交替存储。
核心思路
- 使用计数器(从0或1开始)记录已处理的卡片序号;
- 每成功构建一个 Card 对象(由连续两行数据组成),根据计数器对2取余结果决定插入目标列表;
- 推荐从 counter = 0 开始,用 counter % 2 == 0 表示偶数序号(第1、3、5…张卡 → 放入 evenList),反之放入 oddList;也可从1开始,逻辑等价。
完整实现示例(Java)
import java.io.*;
import java.util.*;
class Card {
int value;
String suit;
public Card(int value, String suit) {
this.value = value;
this.suit = suit;
}
@Override
public String toString() {
return value + " of " + suit;
}
}
public class CardReader {
public static void main(String[] args) throws IOException {
List<card> evenList = new ArrayList(); // 存储第1、3、5...张卡(索引0、2、4...)
List<card> oddList = new ArrayList(); // 存储第2、4、6...张卡(索引1、3、5...)
try (BufferedReader br = new BufferedReader(new FileReader("cards.txt"))) {
int total = Integer.parseInt(br.readLine().trim()); // 读取总张数(可选校验)
int counter = 0;
while (counter <h3>注意事项</h3>
<ul>
<li>
<strong>健壮性处理</strong>:生产代码中应加入异常捕获(如 NumberFormatException、IOException)、空行跳过及行数不足时的提示;</li>
<li>
<strong>内存效率</strong>:若文件极大,可考虑流式处理而非全量加载;</li>
<li>
<strong>扩展性</strong>:该模式可轻松推广至 n 个列表轮询(用 counter % n);</li>
<li>
<strong>索引语义</strong>:明确“第1张卡对应 counter=0”是常见约定,避免因起始值混淆导致逻辑偏移。</li>
</ul>
<p>通过这种基于模运算的分发策略,既能保持代码简洁,又能精准实现数据的交替分组,是处理序列化输入的通用范式之一。</p></card></card>











