Лучший способ отформатировать "01234567890" в "012.345.678-90"? - PullRequest
3 голосов
/ 22 декабря 2011

У меня простой вопрос о том, как отформатировать строку.

У меня есть это число в виде строки "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.

Ответы [ 5 ]

16 голосов
/ 22 декабря 2011

Вы были почти там.

Попробуйте это:

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

Это дает мне: 012.345.678-90

4 голосов
/ 22 декабря 2011

Если вы не хотите преобразовывать в int для обратного преобразования и уверены, что строка будет соответствовать этому формату, вы можете сделать это следующим образом:

sCPF = sCPF.Insert(3,".").Insert(7,".").Insert(11,"-");
0 голосов
/ 22 декабря 2011

Я бы сделал это с RegExp:

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];
}

, но я не уверен, что это выглядит проще, чем ваше предложение: -)

0 голосов
/ 22 декабря 2011

Это должно работать

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

Поскольку . определен как провайдер нестандартного формата, вам просто нужно закрыть его с помощью \

0 голосов
/ 22 декабря 2011

Нужно сделать StringName.PadLeft(11)

...