我有一个模板字符串和来自不同来源,但需要匹配以创建一个新的“填写的”字符串参数数组:有没有更好的方法来计算C#中的字符串中的字符串格式占位符?
string templateString = GetTemplate(); // e.g. "Mr {0} has a {1}"
string[] dataItems = GetDataItems(); // e.g. ["Jones", "ceiling cat"}
string resultingString = String.Format(templateString, dataItems);
// e.g. "Mr Jones has a ceiling cat"
有了这个代码,我假设模板中的字符串格式占位符的数量将等于数据项的数量。对我而言,这通常是一个合理的假设,但我希望能够在没有失败的情况下生成resultingString
,即使假设是错误的。我不介意是否有遗漏数据的空白空间。
如果dataItems
中的项目太多,String.Format
方法可以很好地处理它。如果还不够,我会得到一个异常。
为了解决这个问题,我计算了占位符的数量,并在dataItems数组中添加了新项目(如果没有足够的话)。
计数占位符,我与目前使用的代码是:
private static int CountOccurrences(string haystack)
{
// Loop through all instances of the string "}".
int count = 0;
int i = 0;
while ((i = text.IndexOf("}", i)) != -1)
{
i++;
count++;
}
return count;
}
显然,这使得假设没有那么不被用于任何形式关闭大括号占位符。这也只是感觉错了。 :)
有没有更好的方法来计算字符串格式的占位符?
许多人正确地指出,我的答案标记为正确不会在许多情况下工作。其主要理由是:
- 表示,计数占位符的数量不占字面括号(
{{0}}
) - 计数占位符不考虑重复或跳过占位符的正则表达式(如
"{0} has a {1} which also has a {1}"
)
虽然没有回答你的问题,但这篇文章可能会提供一个替代方案,你可能会觉得有趣http://stackoverflow.com/questions/159017/named-string-formatting-in-c – Kane 2009-06-04 02:30:13