规则二维数组校验需先验证结构规则性(每行非空且长度一致),再按列校验数值合规性(范围/白名单),并识别空值污染,最后封装为可配置的复用方法。

规则二维数组的数据完整性校验,核心是确保“形状一致”和“内容合规”——既要每行长度相同、不为空,又要元素值符合业务定义的范围或格式。不能只检查 array.length 和 array[0].length 就认为安全,必须逐行验证结构,再结合业务规则校验数值。
确认数组结构是否真正规则
所谓“规则”,是指所有非空行长度相等且不为 null。仅靠声明时的 new int[3][4] 不代表运行时仍保持该结构——尤其在动态赋值、部分行被重置或从外部读取数据后容易破坏。
- 遍历每一行,检查
array[i] == null→ 直接视为结构损坏 - 记录首行长度
expectedCols = array[0].length,后续每行都比对array[i].length != expectedCols - 发现任意一行长度不符或为 null,立即中断并返回校验失败(可抛出自定义异常
IrregularArrayException)
数值范围与语义合法性校验
结构正确只是前提;比如一个表示学生成绩的 10×5 数组,每列代表不同科目,那每列就应有独立的合理区间:数学 0–100、出勤率 0–100、评语编码 ≥0 等。
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 避免写死统一阈值,按列定义校验策略(可用二维数组
int[][] bounds = {{0,100},{0,100},{1,5},{0,20},{0,1}}) - 遍历时用
col索引查对应列的上下界,判断array[row][col] bounds[col][1] - 对特殊列(如状态码、枚举值)做白名单校验:
!VALID_STATES.contains(array[row][col])
空值与默认值污染识别
Java 动态初始化的 int[][] 默认填 0,但 0 可能是合法成绩,也可能是未录入的占位符。需区分“有效零”和“缺失标记”。
- 若业务中 0 表示“未填写”,则需额外维护一个布尔型掩码数组
boolean[][] filled或约定某特殊值(如-999)作空标记 - 校验时跳过空标记位置,同时统计“实际有效数据占比”,低于阈值(如 80%)则告警
- 对引用类型二维数组(如
String[][]),必须用Objects.nonNull(array[i][j])替代array[i][j] != null防 NPE
封装可复用的校验入口
把结构检查、列级数值校验、空值识别打包成一个方法,支持传入配置参数,便于测试和集成。
- 签名示例:
ValidationResult validate2DArray(int[][] arr, int[][] colBounds, int nullMarker) - 返回对象含
isValid、errorList(含行列坐标和错误原因)、validCount - 单元测试必须覆盖:空数组、单行、首行为 null、中间行长度短 1、含越界值、全为 null 标记等场景
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










