在字符串

时间:2016-08-05 14:27:55

标签: c# string

哪些选项可用于在C#字符串中以字符串形式显示所有字符(包括不可打印或空格字符(如换行符,制表符等)?

这样做是为了能够以允许日志查看器查看这些字符的方式注销字符串。

例如,给定字符串:

hello
there
    again

...我可以尝试使用“很少使用”的可打印字符,因此结果看起来像这样:

hello¶there¶·again

...或者我可能会使用我知道在字符串中不会出现的标识符,例如反斜杠:

hello\rthere\r\tagain

我考虑使用像Regex.ReplaceString.Replace之类的东西,但我无法弄清楚如何“映射”所有空白/不可打印的字符而无需手动指定我要映射的每个字符。这真的是最好的选择吗?

1 个答案:

答案 0 :(得分:0)

一旦定义了要查看的字符,就可以遍历字符并用等效的数字替换每个不可打印的字符。类似的东西:

var sb = new StringBuilder();

foreach (char c in s)
{
    if (32 <= c && c <= 126)
    {
        sb.Append(c);
    }
    else
    {
        sb.AppendFormat("{{{0}}}", (int)c);
    }
}
Console.WriteLine(sb.ToString());

或者是较短的单行,但我不知道这是否会在大字符串上表现得更好{/ 1}:

StringBuilder

无论您做什么,请确保记住如果您的替换字符/字符串实际上是原始字符串的一部分会发生什么。例如,如果// There might be a better LINQ query, but this works: var result = string.Join(string.Empty, s.Select(c => (32 <= c && c <= 126) ? c.ToString() : string.Format("{{{0}}}", (int)c)) .ToArray() ); 实际上在您的源字符串中,那么您的目标字符串将无法区分占位符和原始字符。