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

转义字符上的字符串替换

  •  9
  • LoveMeSomeCode  · 技术社区  · 16 年前

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

    所以我要做的是使用string.replace \\ 进入之内 \ -这似乎不起作用。

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

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

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

    替换所有双引号,只剩下n而不是\n

    此外,使用 @ 一半的数量 \ 字符或 Regex.Replace 方法给出相同的结果

    有人知道这样做的好方法,而不通过一个字符一个字符的循环?

    3 回复  |  直到 12 年前
        1
  •  14
  •   codelogic    16 年前

    自从 \n 实际上是单个字符,您不能通过简单地替换字符串中的反斜杠来实现此目的。您需要更换每对 \ 以及以下带转义字符的字符,如:

    s.Replace("\\n", "\n");
    s.Replace("\\t", "\t");
    etc
    
        2
  •  8
  •   John Rudy    16 年前

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

    如果您是在XML中完成的,只需按Enter,后退到您创建的新行的开头,就可以完成了。你也可以通过搜索和替换来完成这项工作,尽管这很棘手。

    如果使用GUI Resx编辑器,按住SHIFT键同时按Enter键将给您一个换行符。

    你可以做运行时替换的事情,但是正如你所发现的,很难去做——在我看来,这是一种代码味道。(您也可以提出性能参数,但这取决于调用字符串资源的频率和应用程序的总体规模。)

        3
  •  0
  •   LoveMeSomeCode    16 年前

    实际上,我使用的是约翰的解决方案,直接编辑XML,因为这是该项目更好的解决方案,但代码逻辑回答了一个让我发疯的问题。