Kotlin如何将分号分隔字符串转换为范围并优化现有实现
优化方案
核心优化点
- 替换全量分割为带limit限制的分割:最多分割为3段,匹配你只需要前两段的需求,不需要遍历处理字符串后半段无关内容,字符串越长性能提升越明显
- 移除多余的
dropLast操作,直接取前2个元素,逻辑更直观 - 可选增加边界校验,避免输入格式不符合要求时抛出数组越界、数值转换异常
- 用解构赋值替代硬编码下标取值,语义更清晰,可读性更强
代码实现
确定输入格式绝对合法的最简版本
如果你的业务场景可以100%保证输入一定是数值;数值;数值的格式,可以用这个版本,代码简洁性能最优:
val (start, end) = "10;15;1".split(';', limit = 3) .take(2) .map { it.toBigDecimal() } val someRange = start..end
带容错的通用版本
如果输入格式可能不符合要求,建议增加异常处理逻辑,避免运行时崩溃:
val input = "10;15;1" val someRange = runCatching { val parts = input.split(';', limit = 3) require(parts.size >= 2) { "输入至少需要包含2个分号分隔的数值" } parts[0].toBigDecimal() .. parts[1].toBigDecimal() }.getOrElse { // 这里可以根据业务需求自定义处理逻辑,比如返回默认范围、抛出业务异常等 throw IllegalArgumentException("范围解析失败: ${it.message}", it) }
内容的提问来源于stack exchange,提问作者Nate Hiber
相关产品推荐
相关产品推荐

