Java如何读取无换行数据集,用StringUtils拆分后封装POJO存入DB
实现方案
前置说明
以下实现基于org.apache.commons.lang3.StringUtils工具类,即Apache Commons Lang3库中的工具类,相比JDK原生split方法,无需处理正则转义,还能自动处理空字符串等异常场景。
核心实现思路
- 用
StringUtils.split()方法按~分隔符把整串拆分为字符串数组,默认自动过滤连续分隔符产生的空元素,避免脏数据干扰 - 先校验拆分后数组长度必须为偶数,否则说明原始数据存在字段缺失的格式异常
- 以步长为2遍历数组,偶数下标对应姓名字段,奇数下标对应年龄字段,类型转换后封装到POJO即可
代码示例
1. 定义人员POJO
public class Person { private String name; private Integer age; public Person(String name, Integer age) { this.name = name; this.age = age; } // 此处省略getter、setter、toString方法 }
2. 核心拆分逻辑
import org.apache.commons.lang3.StringUtils; import java.util.ArrayList; import java.util.List; public class PersonDataParser { public List<Person> parseRawData(String rawStr) { List<Person> result = new ArrayList<>(); // 按~分隔原始字符串,自动过滤空串 String[] splitArr = StringUtils.split(rawStr, '~'); // 格式合法性校验:姓名和年龄成对出现,数组长度必须为偶数 if (splitArr == null || splitArr.length % 2 != 0) { throw new IllegalArgumentException("原始数据格式错误,字段不配对"); } // 步长为2遍历,逐个封装POJO for (int i = 0; i < splitArr.length; i += 2) { String name = splitArr[i]; String ageStr = splitArr[i + 1]; // 可选:字段非空校验,可根据业务需求选择跳过异常数据或抛出错误 if (StringUtils.isBlank(name) || StringUtils.isBlank(ageStr)) { continue; } // 年龄转整型,可根据业务需求补充数字格式校验 Integer age = Integer.parseInt(ageStr); result.add(new Person(name, age)); } return result; } }
特殊场景适配
如果原始数据用空字段占位(比如~~代表某个人姓名为空),需要保留空值的话,把拆分方法替换为StringUtils.splitByWholeSeparatorPreserveAllTokens(rawStr, "~")即可,该方法不会自动过滤空串。
内容的提问来源于stack exchange,提问作者Akalanka Hewawasam
相关产品推荐
相关产品推荐

