当前位置:  开发笔记 > 编程语言 > 正文

格式字符串包含"{"时的String.Format异常

如何解决《格式字符串包含"{"时的String.Format异常》经验,为你挑选了3个好方法。

我使用的是VSTS 2008 + C#+ .Net 2.0.当执行以下语句时,会从String.Format语句中抛出FormatException,任何想法有什么问题?

这是获取我正在使用的template.html的地方.我想在template.html中格式化此部分m = {0}.

    string template = String.Empty;
    using (StreamReader textFile = new StreamReader("template.html"))
    {
        template = textFile.ReadToEnd();
        String.Format(template, "video.wmv");
    }

http://www.mediafire.com/download.php?u4myvhbmmzg

编辑1:

这是我的template.html的内容,





    Silverlight Project Test Page 

    

    



    
    

感谢avvance,乔治



1> Marc Gravell..:

猜测,html包含javascript或其他大括号({}),它们都需要加倍({{}})才能使用string.Format.我期望一个不同的(更明显的)令牌可能是有序的,即%%FILENAME%%.然后使用正则表达式或string.Replace.

如果你有一个标签,string.Replace很好; 如果你有很多,有正则表达式的技巧,MatchEvaluator这可能会有所帮助 - 就像这样,但具有不同的正则表达式模式.


添加示例html后更新:我肯定会使用不同的令牌; 在最基本的层面:


template = template.Replace("%%FILENAME%%", "video.wmv");


我对其他大括号进行了检查.

2> Matt Howells..:

您的模板包含需要转义的字符{}字符,否则会混淆String.Format.使用{{和逃脱它们}}.或者,使用不同的机制,例如String.Replace.



3> codeape..:

的String.format()不处理{,并}在格式字符串.您需要更换{{{}}}无处不在的template.html文件.除了使用{0}占位符的单个位置.

不是很优雅.

相反,请考虑使用模板引擎.有关建议,请参见http://csharp-source.net/open-source/template-engines.

下一个最佳解决方案是使用正则表达式(使用MatchEvaluator)或string.Replace(),如其他答案所示.

编辑:

以下是使用StringTemplate模板引擎的示例:

StringTemplate htmlpage = new StringTemplate(File.ReadAllText("template.html"));
htmlpage.SetAttribute("content", "video.wmv");
Console.WriteLine(htmlpage.ToString());

更改template.html文件中的一行:

从:


至:


当模板引擎$content$在模板中遇到时,它会将其替换为您使用代码设置的"content"属性的值.

使用StringTemplate,您可以在模板中执行简单的循环和条件.请参阅文档.

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有