字符串替换转义字符

时间:2008-12-10 22:17:08

标签: c# string resx

今天我发现将字符串放在资源文件中将导致它们被视为文字,即将“第一行文本\ n第二行文本”放入将导致转义字符本身被转义,所以什么是存储的是“第一行的文字\第二行的文字” - 然后这些出现在显示中,而不是我的回车和标签

所以我想做的是使用string.replace将\\转换为\ - 这似乎不起作用。

s.Replace("\\\\", "\\"); 

根本不会更改字符串,因为字符串认为只有1个反斜杠

s.Replace("\\", "");

替换所有的双引号,只留下n代替\ n

另外,使用@\个字符的一半或Regex.Replace方法可以得到相同的结果

任何人都知道这样做的好方法,而不是逐个字符地循环?

3 个答案:

答案 0 :(得分:14)

由于\n实际上是单个字符,因此只需替换字符串中的反斜杠即可实现此功能。您需要使用转义字符替换每对\和以下字符,例如:

s.Replace("\\n", "\n");
s.Replace("\\t", "\t");
etc

答案 1 :(得分:8)

您最好自己调整resx文件。可以通过两种机制输入换行符:您可以将resx文件编辑为XML(在解决方案资源管理器中右键单击,选择“打开方式”,然后选择XML),或者您可以在设计器中执行此操作。

如果您在XML中执行此操作,只需按Enter键,退回到您创建的换行符的开头,然后就完成了。你可以用搜索和替换来做到这一点,虽然它会很棘手。

如果您使用GUI resx编辑器,按住ENTER键的同时按住SHIFT将为您提供换行符。

你可以做运行时替换的事情,但正如你所发现的那样,开始行动很棘手 - 而且在我的脑海里构成代码味道。 (您也可以创建性能参数,但这取决于调用字符串资源的频率以及应用程序的规模。)

答案 2 :(得分:0)

我实际上正在使用John的解决方案并直接编辑XML,因为这是项目的更好解决方案,但是codelogic回答了让我疯狂的问题。