如何按规则在字符串固定间隔插入指定字符(不可用格式化类)
问题排查
你的现有代码存在三个核心问题导致输出不符合预期:
- 插入方向逻辑错误:所有示例的分隔符都是从字符串末尾向左按间隔长度插入,你的实现是从左向右按下标取模插入,逻辑完全不匹配
- 开头冗余插入:循环从下标0开始判断
i%position==0就插入分隔符,会导致输出字符串开头多出来一个额外的待插入字符 - 缺失边界判断:没有处理插入位置不能在字符串末尾的逻辑,会出现末尾多加分隔符的问题
正确实现
核心思路是先计算第一个分隔符的插入位置,后续每间隔position个字符插入一次即可,完全满足你的所有示例要求,且没有使用你禁止的NumberFormat相关类:
fun convertNumberByCharacter(pattern: String, position: Int, characters: String): String { val length = pattern.length // 字符串长度小于等于间隔直接返回原字符串 if (length <= position) return pattern val strBuilder = StringBuilder() // 计算第一个分隔符的插入位置 var firstInsertPos = length % position // 如果总长度刚好是间隔的整数倍,第一个插入位置就是间隔长度,避免开头多插 if (firstInsertPos == 0) firstInsertPos = position for (i in 0 until length) { // 到达插入位置时插入分隔符,排除开头的特殊情况 if (i != 0 && (i - firstInsertPos) % position == 0) { strBuilder.append(characters) } strBuilder.append(pattern[i]) } return strBuilder.toString() }
验证结果
- 测试用例1:输入
convertNumberByCharacter("ABCDEFGH", 3, "_"),输出AB_CDE_FGH,匹配示例要求 - 测试用例2:输入
convertNumberByCharacter("10000000", 3, "_"),输出10_000_000,匹配示例要求 - 测试用例3:输入
convertNumberByCharacter("10000000", 2, "_"),输出10_00_00_00,匹配示例要求
内容的提问来源于stack exchange,提问作者Thang
相关产品推荐
相关产品推荐

