很多 CMS 喜欢生成静态页面,其中最普遍的方式就是替换模板中的字符串。但普遍又存在一个问题,就是重复替换,也就是替换了被替换字符串中的内容,:(,太绕口了,举个例子。
string format = "{title},{content}"; string str = format; str = str.Replace("{title}", "{content}"); // 文章标题就是 {content} str = str.Replace("{content}", "内容"); Response.Write(str);
假设 {title}、{content} 是模板的项,对应文章的标题和内容,后面要替换它的。
有个人很“讨厌”,他把文章标题写成“{content}”,现在经过第二句后 str 变成了“{content},{content}”,经过第三句后就变成了“内容,内容”。
可是我们希望的结果是:{content},内容
解决方法是利用 string.Format
首先,我们不能用 {title} 这样的模板项了,而应该将 {} 中的内容改为数字索引,从 0 开始的。
现在那个捣蛋的人发现我们将模板项由 {title} 改为 {0} 了,将 {content} 改为 {1} 了,于是他把标题也由 {content} 改为 {1} 了。
可是我们不怕他:
string format = "{0},{1}"; string[] items = new string[] { "{1}", "内容" }; string str = string.Format(format, items); Response.Write(str);
输出结果为:{1},内容
问题
{} 中的数字是不是必须按从左至右、从小到大来写呢?
不必,也就是说 {1}{0} 这个模板也是正确的。
同一个索引,可否有多个呢?比如 {1}{1}
可以。
{} 中的数字可否有空隙呢?比如是 {0}{3}。
可以,但是,如上参数列表要有 4 个,只是第 2、3 个没被 String.Format 使用。
{} 中的数字中否必须从 0 开始呢?
不必,就如上问题一样,可以有空隙,那么我们可以把 0 空了。
{} 中的数字是不是只能是 0 - 9 呢?
不是,10、11、12 ……都可以。只是要注意,同上面一样,参数的个数要 >= {} 中最大数 + 1。
更高级的内容请参见:http://msdn.microsoft.com/zh-cn/library/txafckwd(v=VS.80).aspx。