C#字符串拼接出现换行符,替换失效求助:需生成指定格式消息
解决字符串拼接时出现意外换行的问题
看起来你的问题核心是entries[winner]这个字符串里暗藏了换行(或者回车、制表符这类不可见空白字符),而且直接替换\n/\r可能没覆盖到所有情况。我给你几个靠谱的解决思路:
1. 先定位问题根源(可选但推荐)
先确认entries[winner]里到底有哪些特殊字符,比如用这段代码输出每个字符的ASCII码:
var charCodes = string.Join(", ", entries[winner].Select(c => (int)c)); Console.WriteLine(charCodes);
如果看到有10(对应\n)或13(对应\r),那就是明明白白的换行/回车字符在搞鬼。
2. 彻底清理空白字符的方案
方案一:用正则表达式一键搞定
正则的\s+可以匹配所有空白字符(换行、回车、制表符、多个连续空格都算),直接替换成单个空格,再去掉首尾多余空格:
using System.Text.RegularExpressions; // 清理winner名称里的所有多余空白 string cleanWinner = Regex.Replace(entries[winner], @"\s+", " ").Trim(); // 拼接目标字符串 string send = $"!points add {cleanWinner} {prize}";
方案二:手动替换所有可能的特殊字符
如果不想引入正则,也可以逐个替换常见的空白字符,再清理首尾:
string cleanWinner = entries[winner] .Replace("\r", "") // 替换回车 .Replace("\n", "") // 替换换行 .Replace("\t", "") // 替换制表符 .Trim(); // 去掉首尾空格 string send = $"!points add {cleanWinner} {prize.ToString()}";
3. 从源头避免问题
如果entries是从文件、网络请求或者用户输入获取的,建议在存入entries的时候就做一次清理,比如:
// 当你往entries里添加名称时 string rawName = "获取到的原始名称(可能带换行)"; string cleanedName = Regex.Replace(rawName, @"\s+", " ").Trim(); entries.Add(cleanedName);
这样后续拼接就不会再出现类似问题啦。
内容的提问来源于stack exchange,提问作者Negomir
相关产品推荐
相关产品推荐

