如何按‘|’拆分数据库列结果集并获取每行第二个值及校验
代码问题分析与修正
核心问题点
- 正则转义错误:
split("|")里的|是正则元字符,会被当作“或”逻辑拆分每个字符(比如34567|001会拆成["3","4","5","6","7","|","0","0","1"]),正确写法是split("\\|"),用双反斜杠转义让正则把|当作普通分隔符。 - 数组调用字符串方法:
res.replaceAll("\\s", "")完全错误,res是String[]数组,根本没有replaceAll方法,会直接编译报错。应该先对原始字符串做空格清理,再拆分。 - 逻辑冗余错误:代码里对数组二次拆分完全没必要,正确流程是清理原始字符串→按
|拆分→直接取索引为1的元素(数组从0开始,第二个值对应索引1)。 - 语法错误:
if(ves.contains("001") && (ves.contains("002"))少了一个右括号,应该改成if(ves.contains("001") && ves.contains("002"))。 - 类型不安全:
List ves=Arrays.asList(version);没指定泛型,应该写成List<String> ves=Arrays.asList(version);,避免类型转换问题。
修正后的代码示例
批量处理多行数据(收集所有版本号后校验)
List<String> versionList = new ArrayList<>(); // 假设这里是遍历数据库结果集的循环 while (TBOOKER_TRD_INTFTable.next()) { // 先清理字符串里的空格,再拆分 String cleanStr = TBOOKER_TRD_INTFTable.getString("EXT_T_ID_C").replaceAll("\\s", ""); String[] parts = cleanStr.split("\\|"); // 防止数据格式错误导致数组越界 if (parts.length >= 2) { String version = parts[1]; versionList.add(version); System.out.println("提取到版本号:" + version); } else { System.out.println("数据格式异常:" + cleanStr); } } // 校验是否同时包含001和002 if (versionList.contains("001") && versionList.contains("002")) { System.out.println("version is correct"); } else { System.out.println("version is incorrect"); }
单条数据处理(直接提取并校验)
String cleanStr = TBOOKER_TRD_INTFTable.getString("EXT_T_ID_C").replaceAll("\\s", ""); String[] parts = cleanStr.split("\\|"); if (parts.length >= 2) { String target = parts[1]; System.out.println(target); // 校验当前值是否为目标版本 if ("001".equals(target) || "002".equals(target)) { System.out.println("当前版本号正确"); } }
内容的提问来源于stack exchange,提问作者user19974974
相关产品推荐
相关产品推荐

