我必須做一個自動代碼生成器與用戶可配置的字符串與預定義的鍵,並找不到一個好的方法來做到這一點。 例如,一個字符串字符串替換個性化代碼生成器
OT-{CustomCode}-{Date}-{##}
可以生成代碼
OT-C0001-20100420-01
OT-C0001-20100420-02
我想用RegExpr.Replace(),但我會如果代碼問題的客戶是{##}
任何歡迎光臨! (和我的英語很抱歉)
我必須做一個自動代碼生成器與用戶可配置的字符串與預定義的鍵,並找不到一個好的方法來做到這一點。 例如,一個字符串字符串替換個性化代碼生成器
OT-{CustomCode}-{Date}-{##}
可以生成代碼
OT-C0001-20100420-01
OT-C0001-20100420-02
我想用RegExpr.Replace(),但我會如果代碼問題的客戶是{##}
任何歡迎光臨! (和我的英語很抱歉)
您可以使用string.Format()
:
string generated = string.Format("OT-{0}-{1}-{2}", code, date, num);
的{x}
是佔位符被替換字符串。
你的意思是自動生成的代碼定義,例如:
Foo {##} , Bar {Date}
,這將產生:
Foo 01 , Bar 20100420
Foo 02 , Bar 20100420
不是嗎?
我認爲RegExpr.Replace()是一個很好的解決方案,到##問題,你可以做這樣的事情:
private void Generate()
{
Regex doubleSharpRegEx = new Regex("{#+}");
string customString = "Foo {####}";
string[] generatedCodes = new string[3];
for (int i = 0; i < generatedCodes.Length; i++)
{
string newString = doubleSharpRegEx.Replace(customString,
match =>
{
// Calculate zero padding for format
// remove brackets
string zeroPadding = match.Value.Substring(1, match.Value.Length - 2);
// replace # with zero
zeroPadding = zeroPadding.Replace('#', '0');
return string.Format("{0:" + zeroPadding + "}", i);
});
generatedCodes[i] = newString;
}
}
和數組generatedCodes包含:
Foo 0000
Foo 0001
Foo 0002
Foo 0003
編輯: Lambdas表達式僅適用於框架3.5。 如果您需要2.0的解決方案,你只能更換一個委託(明明設置我可委派的方法如類成員)
EDIT 2 lambda表達式部分: 您可以結合2回答,例如下面的代碼:
private void Generate2()
{
Regex customCodeRegex = new Regex("{CustomCode}");
Regex dateRegex = new Regex("{Date}");
Regex doubleSharpRegex = new Regex("{#+}");
string customString = "Foo-{##}-{Date}-{CustomCode}-{####}";
string newString = customCodeRegex.Replace(customString, "{0}");
newString = dateRegex.Replace(newString, "{1}");
newString = doubleSharpRegex.Replace(newString,
match =>
{
string zeroPadding = match.Value.Substring(1, match.Value.Length - 2);
zeroPadding = zeroPadding.Replace('#', '0');
return "{2:" + zeroPadding + "}";
});
string customCode = "C001";
string date = DateTime.Today.ToString("yyyyMMdd");
string[] generatedCodes = new string[3];
for (int i = 0; i < generatedCodes.Length; i++)
{
generatedCodes[i] = string.Format(newString, customCode, date, i);
}
}
StringBuilder類提供了高效的替代:
string code = "C0001";
DateTime date = DateTime.Now;
int count = 1;
String formatString = "OT-{CustomCode}-{Date}-{##}";
StringBuilder sb = new StringBuilder(formatString);
sb.Replace("{CustomCode}", code);
sb.Replace("{Date}", date.ToString("yyyyMMdd"));
sb.Replace("{##}", count);
string result = sb.ToString();
但這個如果你做了同樣的記號多個內容替換爲更加有用。看起來像你需要String.Format建議由Elisha