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
相关产品推荐
相关产品推荐

