代码之家  ›  专栏  ›  技术社区  ›  equin0x80

在出现文本“\”+“n”时转义换行符

  •  2
  • equin0x80  · 技术社区  · 7 年前

    在我的应用程序的设置文件中,每行都采用 名称=值 (例如: 颜色=红色 )名称由应用程序确定,而值由用户键入文本。

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

    但是,用户也可以键入两个字符的序列“\”+“n”。所以假设我有任意的讨厌的绳子 “abc \n \\n \ \ \ \ \n \ \ \ \nxyz” (其中有两个换行符和两个文字\“+”n“序列)。什么算法可以安全地(i)转义字符串,以确保它不包含换行符,然后(i i)反转过程以恢复原始字符串?

    2 回复  |  直到 7 年前
        1
  •  1
  •   Magnetron    7 年前

    如果你只想处理 '\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:

    基础知识
    \n n
    \
    XYZ
    
        2
  •  -1
  •   Shmosi    7 年前

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

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

    对于用户值中的换行符,我也遇到了这个问题,我通过替换换行符来管理它。( \n )用户永远不会输入的内容(例如 <|NewLine|> )当我从文件中写入或读取时,我会替换相应的值

    用其他东西替换换行符不是最好的解决方案,但我喜欢使用它,因为它对我来说相当简单

    推荐文章