Android Studio中Kotlin条码处理函数问题:截取指定条码段失败
问题排查与修正:Kotlin条码处理函数
原代码的核心错误
- 语法错误:使用了中文全角引号
“0944”,Kotlin仅支持英文半角引号"0944",这会直接导致编译失败或运行异常。 - 逻辑计算混乱:
start = index -7的取值完全不符合“跳过前8位前缀”的需求,示例中“0944”起始索引为8,计算后start=1,后续截取逻辑完全偏离目标。end = index +10的取值错误,导致拼接后的字符串包含了后缀的部分内容(如示例中的“32”),无法得到正确的14位中间内容。- 条件判断逻辑模糊,没有明确校验前缀、中间内容、后缀的长度匹配关系,容易出现误判。
- 需求匹配缺失:未校验条码是否以指定前缀
01818710开头、以指定后缀329272结尾,仅通过indexOf("0944")判断,会误处理其他包含“0944”但不符合规则的条码。
修正后的函数代码
private fun processBarcode(barcode: String): String { val prefix = "01818710" val suffix = "329272" val marker = "0944" // 严格校验条码的前缀、标记存在、后缀规则 if (barcode.startsWith(prefix) && barcode.contains(marker) && barcode.endsWith(suffix)) { // 截取前缀之后、后缀之前的中间内容 return barcode.substring(prefix.length, barcode.length - suffix.length) } // 不满足规则则返回原条码 return barcode }
修正逻辑说明
- 明确定义前缀、后缀、标记字符串,让逻辑更清晰易维护。
- 通过
startsWith和endsWith严格校验条码的前后缀规则,避免误处理。 - 直接通过前缀长度和后缀长度计算截取范围:从前缀结束的位置(索引8)开始,到总长度减去后缀长度(索引28-6=22)结束,正好得到需要保留的14位内容。
内容的提问来源于stack exchange,提问作者Maurice
相关产品推荐
相关产品推荐

