You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按规则在字符串固定间隔插入指定字符(不可用格式化类)

问题排查

你的现有代码存在三个核心问题导致输出不符合预期:

  • 插入方向逻辑错误:所有示例的分隔符都是从字符串末尾向左按间隔长度插入,你的实现是从左向右按下标取模插入,逻辑完全不匹配
  • 开头冗余插入:循环从下标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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 14:06:00