c# - 在存在文字“\”+“n”的情况下转义换行符
问题描述
在我的应用程序的设置文件中,每一行都采用name=value的形式(例如:color=red)。名称由应用程序确定,而值是用户键入的文本。
由于文件格式每行需要一个设置,如果用户的值包含换行符(“\n”,ASCII 10),则会出现问题:这将导致解析器崩溃(或允许他们插入虚假的name=value名称无效的记录)。但是,我确实希望用户能够使用这个字符,所以我需要以某种方式对其进行转义:例如,s = s.Replace("\n", "\\n");
但是,用户也可以键入两个字符序列“\”+“n”。所以假设我有任意讨厌的字符串,比如"ABC\n\\n\\\\n\n\\\nXYZ"(其中有两个换行符和两个文字 "\" + "n" 序列)。什么算法可以安全地(i)转义字符串,以确保它不包含换行符,然后(ii)反转过程以恢复原始字符串?
解决方案
如果您只想处理'\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
解析回:
ABC
\n\\n
\
XYZ