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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:24:04