在我的应用的设置文件中,每一行的格式为 name = value (例如: color = red )。名称由应用程序确定,而值则由用户键入文本。
由于文件格式每行需要一个设置,因此如果用户的值包含换行符(“ \ n”,ASCII 10),则会出现问题:这将使解析器崩溃(或允许他们插入假的 name = value 具有无效名称的记录)。但是,我确实希望用户能够使用此字符,因此我需要以某种方式对其进行转义:例如s = s.Replace("\n", "\\n");
但是,用户也可以键入两个字符的序列“ \” +“ n”。因此,假设我有任意任意讨厌的字符串,例如“ ABC \ n \\ n \\\\ n \ n \\\ nXYZ” (其中有两个换行符和两个文字“ \” +“ n ”)。哪种算法可以安全地(i)对该字符串进行转义,以确保它不包含换行符,然后(ii)逆转该过程以恢复原始字符串?
答案 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并不是最佳解决方案,但我喜欢使用它,因为它对我来说很简单