3

我有一个关于如何格式化字符串的简单问题。

我将此数字作为字符串"01234567890",左侧为零,并且需要将其格式化为“ 012.345.678-90 ”。

我用它解决了

char[] charArgs = sCPF.ToCharArray();

return String.Format("{0}{1}{2}.{3}{4}{5}.{6}{7}{8}-{9}{10}", 
                     charArgs[0], charArgs[1], charArgs[2], charArgs[3], 
                     charArgs[4], charArgs[5], charArgs[6], charArgs[7], 
                     charArgs[8], charArgs[9], charArgs[10]);

我也试过了:

Convert.ToInt64("01234567890").ToString("000.000.000-00")

但这给了我“1234567890,000000-00”

但如果我也试过这个

Convert.ToInt64("01234567890").ToString("000-000-000-00")

这导致“012-345-678-90”,但在这种情况下不是我需要的,我需要点(。)。

有更好的方法吗?

我正在使用.net 2.0。

4

5 回答 5

16

你快到了。

试试这个:

Convert.ToInt64("01234567890").ToString(@"000\.000\.000-00")

这给了我:012.345.678-90

于 2011-12-22T13:48:38.163 回答
4

如果您不想转换为 int 来转换回来,并且您确定字符串将遵循这种格式,您可以这样做:

sCPF = sCPF.Insert(3,".").Insert(7,".").Insert(11,"-");
于 2011-12-22T13:50:09.977 回答
0

这应该工作

Convert.ToInt64("01234567890").ToString("000\\.000\\.000-00")

由于.被定义为自定义格式提供程序,您只需要使用\

于 2011-12-22T13:57:09.960 回答
0

我会用正则表达式来做:

private void button1_Click(object sender, EventArgs e)
{
    Regex exp = new Regex(@"(\d{3})(\d{3})(\d{3})(\d{2})");
    string s = "01234567890";
     string newS = exp.Replace(s, new MatchEvaluator(doIt));
     newS += "";
}

private string doIt(Match m)
{
    return m.Groups[1] + "." + m.Groups[2] + "." + m.Groups[3] + "-" + m.Groups[4];
}

但我不确定它看起来比你的建议更简单:-)

于 2011-12-22T14:00:20.677 回答
-6

需要做StringName.PadLeft(11)

于 2011-12-22T13:48:20.217 回答