【发布时间】:2010-02-18 07:55:53
【问题描述】:
我有一个包含 16 个字母数字字符的字符串,例如F4194E7CC775F003。我想将其格式化为 F419-4E7C-C775-F003。
我尝试过使用
string.Format("{0:####-####-####-####}","F4194E7CC775F003");
但这不起作用,因为它不是数值。
所以我想出了以下内容:
public class DashFormatter : IFormatProvider, ICustomFormatter
{
public object GetFormat(Type formatType)
{
return this;
}
public string Format(string format, object arg, IFormatProvider formatProvider)
{
char[] chars = arg.ToString().ToCharArray();
StringBuilder sb = new StringBuilder();
for (int i = 0; i < chars.Length; i++)
{
if (i > 0 && i % 4 == 0)
{
sb.Append('-');
}
sb.Append(chars[i]);
}
return sb.ToString();
}
}
并通过使用
string.Format(new DashFormatter(), "{0}", "F4194E7CC775F003");
我能够解决问题,但是我希望有更好/更简单的方法来解决这个问题?也许是一些 LINQ 魔法?
谢谢。
【问题讨论】:
-
我认为这很简单,但遗憾的是,它不起作用:
string.Format("{0}{1}{2}{3}-{4}{5}{6}{7}-{8}{9}{10}{11}-{12}{13}{14}{15}", aString.ToCharArray()); -
string.format 需要参数列表。 aString.ToCharArray() 被视为一个数组参数。
标签: c# string formatting