【问题标题】:Convert newline character to "\n" string将换行符转换为“\n”字符串
【发布时间】:2016-03-22 18:47:58
【问题描述】:

这可能是一个愚蠢的问题,但一些粗略的搜索并没有给我答案。我在寻找字符串中的无效字符时遇到问题;其中恰好是换行符、制表符等。但是,当找到一个时,它会打印到控制台;可以想象,

"Character 
 is invalid"

可能会让团队一目了然。那么在 C# 中是否有一种快速简便的方法可以将换行符转换为其字符串文字版本"\n",但不会转换非“特殊”的无效字符?

这是我的代码的简化版本:

using System.Text.RegularExpressions
class Foo {
    Regex invalidCheck = @"[^\w_ ]";

    public void ParseString(string command) {
        var invalid = invalidCheck.Match(command)
        if (invalid.Success)
            Console.WriteLine("Invalid character " + invalid.Value)
        else {
            // Do things with the string...
        }
    }
}

当程序运行时,我不知道invalid.Value实际上是什么,但我知道我需要得到它才能将空白字符转换为可读的东西。

【问题讨论】:

  • 查看 string.Replace 或 Regex.Replace (文字或正则表达式),这将直接用于单个 \n -> "\n" (请记住斜杠或使用字符串逐字逐句文字),但更有趣的是不可打印/空白 -> 转义。
  • 你的代码是什么样的?
  • s = s.Replace("\r", "\"\\r\"").Replace("\n", "\"\\n\"");跨度>
  • 换行符在代码中不显示为\n。这只是对编码器友好的表示 - 新行是一个字节,而不是两个字节。您需要在每个特殊字符的基础上执行 s/\n/\\n/ 之类的操作,以将该单个换行符转换为两个文字字符。
  • 尝试将“\n”替换为“\\n”

标签: c# string newline


【解决方案1】:

您可以使用字典并循环遍历键值对。

这是一个例子:

String escp(String x) {
    Dictionary<String, String> replacements = new Dictionary<String, String>();
    replacements["\n"] = "\\n";
    replacements["\r"] = "\\r";
    replacements["\t"] = "\\t";
    foreach (var i in replacements) {
       if(x.IndexOf(i.Key) > -1)
          x = x.Replace(i.Key, i.Value);
    }
    return x;
}

你可以这样使用:

String x = "This has\na new line";
Console.WriteLine(x);

String y = escp(x);
Console.WriteLine(y);

对于您的情况,只需使用 escp 函数包围 invalid.Value

Console.WriteLine("Invalid character " + escp(invalid.Value));

【讨论】:

  • 我喜欢这个想法,它实际上是在我思考问题时想到的,但就像 rashfmnb 的回答一样,它可能会让我措手不及,也迫使我定义一个辅助方法。我很惊讶没有内置方法,但我仍然喜欢这个答案。
  • 那么问题来了,你如何“不”成为盲人,你必须在每种情况下定义每个文字来替换它们。
  • 我想我在问这个问题时希望的是一种内置方法。如果没有任何结果,尽管考虑接受这个答案。
  • 我刚刚写下了一个想法,无论您是通过创建扩展方法还是通过在代码中编写单行来实现它,这一切都取决于您要如何使用它
  • 想要 100% 确定自己没有被蒙蔽?转义序列模式的数量有限。见msdn.microsoft.com/en-us/library/h21280bw.aspx。换行符和制表符是迄今为止最受欢迎的。如果您正在维护一个无效字符列表,那么您根本不会措手不及——您已经有了一个要查找的内容的离散列表。只需为每个字符串设置匹配的替换字符串即可。
【解决方案2】:

这样做。

s = s.Replace("\r", "\"\\r\"").Replace("\n", "\"\\n\"");

或者你可以创建扩展方法

    public static class MyExtensions
    {
       public static int WordCount(this String str)
       {
           return str.Replace("\r", "\"\\r\"").Replace("\n", "\"\\n\"");
       }
    }

并调用它并添加尽可能多的无效字符或字符串以根据您的要求进行转换。

【讨论】:

  • 感觉应该有一种方法可以用更少的函数调用来做到这一点,但如果没有其他结果,我想这就是答案。
  • 另外,如果我没有包含我没有意识到存在的东西,这种方法会让我措手不及。
【解决方案3】:

I guess you need use this 将“\n”替换为“\n”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-28
    • 2021-10-08
    • 2019-10-10
    • 1970-01-01
    相关资源
    最近更新 更多