字符串自定义格式化程序 .NET
String custom formatter .NET
自定义格式字符串有一个问题。
我想做这样的事:
var str = "SOME_ORIGINAL_FIELD_NAME";
var format1 = "XX_X_X";
var format2 = "X_XXX";
var strFormat1 = String.Format(str, format1); // SOMEORIGINAL_FIELD_NAME
var strFormat2 = String.Format(str, format2); // SOME_ORIGINALFIELDNAME
有谁知道正确的搜索方向吗?也许我应该看看 IFormatProvider 和 ICustomFormatter 方面。
将格式字符串中的 X
替换为连续的占位符,并将输入字符串值拆分为字符串数组,然后应用 string.Format()
:
public static string FormatSplitAndJoin(string input, string formatTemplate, string delimiter = "_", string placeholder = "X")
{
// split "a_b_c" into ["a", "b", "c"]
var parts = input.Split(delimiter);
// turn "X_X_X" into "{0}_{1}_{2}"
var index = 0;
var formatString = Regex.Replace(formatTemplate, placeholder, m => string.Format("{{{0}}}", index++));
// validate input length
if(index > parts.Length)
throw new ArgumentException(string.Format("input string resulted in fewer arguments than expected, {0} placeholders found", index));
// apply string.Format()
return string.Format(formatString, parts);
}
现在您可以:
var str = "SOME_ORIGINAL_FIELD_NAME";
var format1 = "XX_X_X";
var format2 = "X_XXX";
var strFormat1 = FormatSplitAndJoin(str, format1); // SOMEORIGINAL_FIELD_NAME
var strFormat2 = FormatSplitAndJoin(str, format2); // SOME_ORIGINALFIELDNAME
当然可以,您只需要:
- 将源字符串拆分为其组件,
- 使用
{i}
占位符代替 X
,并且
- 将参数反转为
String.Format
(格式在前,数据在后)。
示例代码 (fiddle):
var components = "SOME_ORIGINAL_FIELD_NAME".Split('_');
var format1 = "{0}{1}_{2}_{3}";
var format2 = "{0}_{1}{2}{3}";
var strFormat1 = String.Format(format1, components); // SOMEORIGINAL_FIELD_NAME
var strFormat2 = String.Format(format2, components); // SOME_ORIGINALFIELDNAME
自定义格式字符串有一个问题。
我想做这样的事:
var str = "SOME_ORIGINAL_FIELD_NAME";
var format1 = "XX_X_X";
var format2 = "X_XXX";
var strFormat1 = String.Format(str, format1); // SOMEORIGINAL_FIELD_NAME
var strFormat2 = String.Format(str, format2); // SOME_ORIGINALFIELDNAME
有谁知道正确的搜索方向吗?也许我应该看看 IFormatProvider 和 ICustomFormatter 方面。
将格式字符串中的 X
替换为连续的占位符,并将输入字符串值拆分为字符串数组,然后应用 string.Format()
:
public static string FormatSplitAndJoin(string input, string formatTemplate, string delimiter = "_", string placeholder = "X")
{
// split "a_b_c" into ["a", "b", "c"]
var parts = input.Split(delimiter);
// turn "X_X_X" into "{0}_{1}_{2}"
var index = 0;
var formatString = Regex.Replace(formatTemplate, placeholder, m => string.Format("{{{0}}}", index++));
// validate input length
if(index > parts.Length)
throw new ArgumentException(string.Format("input string resulted in fewer arguments than expected, {0} placeholders found", index));
// apply string.Format()
return string.Format(formatString, parts);
}
现在您可以:
var str = "SOME_ORIGINAL_FIELD_NAME";
var format1 = "XX_X_X";
var format2 = "X_XXX";
var strFormat1 = FormatSplitAndJoin(str, format1); // SOMEORIGINAL_FIELD_NAME
var strFormat2 = FormatSplitAndJoin(str, format2); // SOME_ORIGINALFIELDNAME
当然可以,您只需要:
- 将源字符串拆分为其组件,
- 使用
{i}
占位符代替X
,并且 - 将参数反转为
String.Format
(格式在前,数据在后)。
示例代码 (fiddle):
var components = "SOME_ORIGINAL_FIELD_NAME".Split('_');
var format1 = "{0}{1}_{2}_{3}";
var format2 = "{0}_{1}{2}{3}";
var strFormat1 = String.Format(format1, components); // SOMEORIGINAL_FIELD_NAME
var strFormat2 = String.Format(format2, components); // SOME_ORIGINALFIELDNAME