有没有办法使用格式字符串来分区字符串?

时间:2014-07-17 08:49:31

标签: c# .net

我有一个字符串" 123456"。它是一个数字,如果有帮助我们也可以转换它。 我想使用格式字符串来获得" 456"出。那可能吗?类似于子串(3,6)只有格式字符串。

参考:http://msdn.microsoft.com/en-us/library/vstudio/0c899ak8(v=vs.100).aspx

1 个答案:

答案 0 :(得分:1)

可以这样做,但我个人宁愿直接使用子字符串。

以下代码可能不包括边缘情况,但说明了一点:

    public sealed class SubstringFormatter : ICustomFormatter, IFormatProvider
{
    private readonly static Regex regex = new Regex(@"(\d+),(\d+)", RegexOptions.Compiled);


    public string Format(string format, object arg, IFormatProvider formatProvider)
    {
        Match match = regex.Match(format);

        if (!match.Success)
        {
            throw new FormatException("The format is not recognized: " + format);
        }

        if (arg == null)
        {
            return string.Empty;
        }

        int startIndex = int.Parse(match.Groups[1].Value);
        int length = int.Parse(match.Groups[2].Value);

        return arg.ToString().Substring(startIndex, length);
    }

    public object GetFormat(Type formatType)
    {
        return formatType == typeof(ICustomFormatter) ? this : null;
    }
}

要打电话:

    var formatter = new SubstringFormatter();

    Console.WriteLine(string.Format(formatter, "{0:0,4}", "Hello"));

对此的输出将是“地狱”