我有一個模板字符串和來自不同來源,但需要匹配以創建一個新的「填寫的」字符串參數數組:有沒有更好的方法來計算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