在存在文字“ \” +“ n”的情况下转义换行符

时间:2018-10-03 13:34:52

标签: c# escaping newline

在我的应用的设置文件中,每一行的格式为 name = value (例如: color = red )。名称由应用程序确定,而值则由用户键入文本。

由于文件格式每行需要一个设置,因此如果用户的值包含换行符(“ \ n”,ASCII 10),则会出现问题:这将使解析器崩溃(或允许他们插入假的 name = value 具有无效名称的记录)。但是,我确实希望用户能够使用此字符,因此我需要以某种方式对其进行转义:例如s = s.Replace("\n", "\\n");

但是,用户也可以键入两个字符的序列“ \” +“ n”。因此,假设我有任意任意讨厌的字符串,例如“ ABC \ n \\ n \\\\ n \ n \\\ nXYZ” (其中有两个换行符和两个文字“ \” +“ n ”)。哪种算法可以安全地(i)对该字符串进行转义,以确保它不包含换行符,然后(ii)逆转该过程以恢复原始字符串?

2 个答案:

答案 0 :(得分:1)

如果您只想处理'\n',则可以使用以下方法:

string Parse(string input)
{
    return input.Replace("\\","\\\\").Replace("\n","\\n");
}

string ParseBack(string input)
{
    string output="";
    for(int i=0; i < input.Length; i++)
    {
        if(input[i]=='\\')
        {
            i++;
            if(input[i]=='n')
            {
                output += '\n';
            }
            else 
            {
                output += input[i];
            }
        }
        else
        {
            output += input[i];
        }
    }
    return output;
}

输入:

ABC 
\n\\n 
\ 
XYZ

已解析:

ABC\n\\n\\\\n\n\\\nXYZ

ParsedBack:

ABC 
\n\\n 
\ 
XYZ

答案 1 :(得分:-1)

首先,您可以使用@"string",它将停止转义序列

所以基本上,@"\n"会变成\n而不是换行符

为了使换行符在用户的价值之内,我也遇到了这个问题,并且通过用用户永远不会键入的内容(例如{{1})替换newline-char(\n)来解决它}。当我读写文件时,我会替换相应的值

以其他方式替换newline-char并不是最佳解决方案,但我喜欢使用它,因为它对我来说很简单

相关问题