Groovy技术问询:按竖线分割管道分隔文件表头,返回指定字段索引
解决Groovy中管道分隔表头的字段索引查找问题
首先得说下你原来代码里的小问题:你调用了headingslist.split("\\|")但没把分割后的结果存下来,反而把整个表头字符串直接加到了ArrayList里——这就导致你的list里只有一个元素(完整的表头字符串),自然用indexOf找不到单个字段啦。
咱们来修正一下,正确的实现步骤很清晰:
- 先把表头字符串按竖线分割成真正的字段列表
- 直接在这个列表上调用
indexOf获取目标字段的索引 - 可以加个判断逻辑,处理字段不存在的情况(避免拿到-1还不知情)
完整的正确代码示例
// 定义你的表头字符串 def headingsStr = "URN|BATCHID|CUST_URN|CUSTOMER_NAME|POSTCODE|PERSONKEY|MOBILENUMBER||PREMIUM|STATUS" // 按竖线分割成List(split返回数组,转成List更方便操作) def headingsList = headingsStr.split("\\|") as List // 获取两个目标字段的索引 int indexMobNo = headingsList.indexOf("MOBILENUMBER") int indexPersonKey = headingsList.indexOf("PERSONKEY") // 输出结果验证 println "MOBILENUMBER的索引是: $indexMobNo" println "PERSONKEY的索引是: $indexPersonKey" // 可选:健壮性处理——字段不存在时给出提示 if (indexMobNo == -1) { println "警告:未找到MOBILENUMBER字段" } if (indexPersonKey == -1) { println "警告:未找到PERSONKEY字段" }
代码细节说明
split("\\|"):竖线在正则表达式里是特殊字符,所以需要用双反斜杠转义,才能正确按竖线分割字符串as List:把split返回的String数组转成Groovy的List,方便后续调用indexOf方法indexOf会返回字段在列表中从零开始的索引,如果字段不存在则返回-1,加个判断能让代码更健壮
用你给出的表头字符串测试,运行后会输出:
MOBILENUMBER的索引是: 6 PERSONKEY的索引是: 5
完全符合你的需求~
内容的提问来源于stack exchange,提问作者Max Nyirenda
相关产品推荐
相关产品推荐

