使用equalsIgnoreCase校验字符串返回false,如何有效校验多列字段值
你当前的校验逻辑是直接将单个预期值Predictive和完整的实际串Enforcement Type Predictive PEDP做全量相等匹配,两者本身内容长度就不一致,所以equalsIgnoreCase必然返回false。你需要先把实际返回的整行文本按列拆分后,再分别校验对应列的值即可。
解决方案步骤
- 首先对拿到的实际值做预处理:去除首尾空白字符,再按列分隔规则拆分为独立的列字段数组。从你给出的示例来看,列与列之间用多个空格分隔,列内部的空格(比如第一列的
Enforcement Type)是单个空格,所以可以用split("\\s{2,}")按2个及以上连续空格拆分。如果你的实际数据是用制表符分隔列,将拆分规则替换为split("\\t")即可。 - 校验拆分后的数组长度是否符合预期,避免后续取值出现数组越界异常。
- 取拆分后对应下标的列值,分别和
expectedResult(第二列,下标为1)、sourceVal(第三列,下标为2)做相等校验即可。
修改后的参考代码
public void validateKeyInfo_1(String expectedResult, String elementId, String sourceVal) { String actualValue = getElement(elementId).getText(); // 空值前置校验 if (StringUtils.isBlank(actualValue)) { if (expectedResult == null && StringUtils.isBlank(sourceVal)) { scenario.log(LogStatus.INFO, "实际值为空,符合预期"); return; } reportFailure("实际值为空,与预期不符"); return; } // 按多空格拆分列,可根据实际分隔规则调整拆分参数 String[] columns = actualValue.trim().split("\\s{2,}"); // 校验列数是否足够,这里预期至少3列 if (columns.length < 3) { reportFailure("实际值列数不足,无法完成校验"); return; } // 分别校验第二列、第三列 boolean expectedMatch = (expectedResult == null) || expectedResult.equalsIgnoreCase(columns[1]); boolean sourceMatch = (sourceVal == null) || sourceVal.equalsIgnoreCase(columns[2]); if (expectedMatch && sourceMatch) { scenario.log(LogStatus.INFO, "校验通过,预期结果:" + expectedResult + ",实际第二列值:" + columns[1]); scenario.log(LogStatus.INFO, "校验通过,源值:" + sourceVal + ",实际第三列值:" + columns[2]); } else if (!expectedMatch) { reportFailure("第二列值不匹配,预期:" + expectedResult + ",实际:" + columns[1]); } else { reportFailure("第三列值不匹配,预期:" + sourceVal + ",实际:" + columns[2]); } }
内容的提问来源于stack exchange,提问作者tummalsr
相关产品推荐
相关产品推荐

