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

C# 字符串清理后每3位插入短横线代码异常求助

问题原因

你原代码中Enumerable.Range的生成数量用了cleanedstring.Length / 3,整数除法会直接舍弃小数部分,当字符串总长度不是3的整数倍时,末尾不足3位的字符不会被纳入遍历范围,自然会被丢弃。同时直接固定取3个字符的写法,在处理最后一段不足3位的内容时还会触发索引越界异常。

修正方案
string cleanedstring = S.Replace(" ", "").Replace("-", "");
// 计算分段总数,有余数时自动向上取整多算一段
int segmentCount = (cleanedstring.Length + 2) / 3;
var list = Enumerable.Range(0, segmentCount).Select(i => 
{
    int startIndex = i * 3;
    // 最后一段不足3位时取剩余长度,避免索引越界
    int takeLength = Math.Min(3, cleanedstring.Length - startIndex);
    return cleanedstring.Substring(startIndex, takeLength);
});
var res = string.Join("-", list);
return res;
验证效果
  • 输入11-43 48 5555 8351,清理后字符串为11434855558351,总长度14,分段数为5,最后一段取2位,输出结果为114-348-555-583-51,符合预期。
  • 输入888372789,总长度9,分段数3,输出888-372-789,原有正常场景不受影响。

内容的提问来源于stack exchange,提问作者John John

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 10:36:00