C#中如何计算包含转义字符及特殊字符的字符串实际长度?
在C#中获取包含转义符的字符串总长度方法
在C#中,字符串的Length属性统计的是实际存储的字符数——比如\n(换行符)是单个字符,\'是单个单引号字符,不会把它们的转义写法(\\n、\\')中的反斜杠计入长度。如果要统计转义写法下的总字符数(即把每个特殊字符转换成对应的转义序列后计算长度),可以用以下方案:
通用处理方案
手动逐个替换特殊字符的方式只能覆盖已知场景,更通用的方式是遍历字符串,将所有需要转义的字符替换为对应的转义序列,再计算长度:
public static int GetEscapedStringLength(string input) { if (string.IsNullOrEmpty(input)) return 0; StringBuilder sb = new StringBuilder(); foreach (char c in input) { switch (c) { case '\n': sb.Append("\\n"); break; case '\t': sb.Append("\\t"); break; case '\r': sb.Append("\\r"); break; case '\'': sb.Append("\\'"); break; case '\"': sb.Append("\\\""); break; case '\\': sb.Append("\\\\"); break; default: sb.Append(c); break; } } return sb.Length; } // 调用示例 string demo = "It's nice to meet you\nline2"; int escapedLength = GetEscapedStringLength(demo); // 原Length是23,转义后长度是25(因为'转成\\',\n转成\\n,各多一个反斜杠)
如果需要处理Unicode转义(比如将非ASCII字符转为\uXXXX格式),可以扩展switch逻辑,判断字符的编码范围后生成对应的转义序列。
现有方案说明
你当前使用的"line 1\nline2".Replace("\n", "\\n").Length是可行的,但仅针对单个转义字符,当字符串包含多种特殊字符时,需要依次添加多个Replace调用,通用性较差。
内容的提问来源于stack exchange,提问作者Paul Hebert
相关产品推荐
相关产品推荐

