форматирование строки в MVC / C # - PullRequest
15 голосов
/ 01 апреля 2011

У меня есть строка 731478718861993983, и я хочу получить это 73-1478-7188-6199-3983 с помощью C #. Как я могу отформатировать это так?

Спасибо.

Ответы [ 10 ]

13 голосов
/ 01 апреля 2011

Используя регулярное выражение:

    public static string FormatTest1(string num)
    {
        string formatPattern = @"(\d{2})(\d{4})(\d{4})(\d{4})(\d{4})";
        return Regex.Replace(num, formatPattern, "$1-$2-$3-$4-$5");
    }

    // test
    string test = FormatTest1("731478718861993983");
    // test result: 73-1478-7188-6199-3983
9 голосов
/ 01 апреля 2011

Если вы имеете дело с long числом, вы можете использовать NumberFormatInfo для его форматирования:

Сначала определите ваше NumberFormatInfo (вам могут потребоваться дополнительные параметры, это основные 3):

NumberFormatInfo format = new NumberFormatInfo();
format.NumberGroupSeparator = "-";
format.NumberGroupSizes = new[] { 4 };
format.NumberDecimalDigits = 0;        

Далее вы можете использовать его на своих номерах:

long number = 731478718861993983;
string formatted = number.ToString("n", format);
Console.WriteLine(formatted);

В конце концов .Net имеет очень хорошую поддержку глобализации - вам лучше использовать ее!

2 голосов
/ 01 апреля 2011
string s = "731478718861993983"
var newString = (string.Format("{0:##-####-####-####-####}", Convert.ToInt64(s));
1 голос
/ 01 апреля 2011

Если вы имеете дело исключительно со строкой, вы можете сделать простое Regex.Replace, чтобы захватить каждую группу из 4 цифр:

string str = "731478718861993983";
str = Regex.Replace(str, "(?!^).{4}", "-$0" ,RegexOptions.RightToLeft);
Console.WriteLine(str);

Обратите внимание на использование RegexOptions.RightToLeft, чтобы начать захват справа (поэтому "12345" будет заменено на 1-2345, а не -12345), и использование (?!^), чтобы избежать добавления тире в начале.
Вы можетехотите захватить только цифры - возможный шаблон тогда может быть @"\B\d{4}".

1 голос
/ 01 апреля 2011

Простой (и наивный) метод расширения:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("731478718861993983".InsertChar("-", 4));
    }
}

static class Ext
{
    public static string InsertChar(this string str, string c, int i)
    {
        for (int j = str.Length - i; j >= 0; j -= i)
        {
            str = str.Insert(j, c);
        }

        return str;
    }
}
1 голос
/ 01 апреля 2011

LINQ-only one-liner:

var str = "731478718861993983";
var result = 
    new string(
        str.ToCharArray().
            Reverse(). // So that it will go over string right-to-left
            Select((c, i) => new { @char = c, group = i / 4}). // Keep group number
            Reverse(). // Restore original order
            GroupBy(t => t.group). // Now do the actual grouping
            Aggregate("", (s, grouping) => "-" + new string(
                grouping.
                    Select(gr => gr.@char).
                    ToArray())).
            ToArray()).
    Trim('-');

Может обрабатывать строки произвольной длины.

0 голосов
/ 01 апреля 2011

Если позиция «-» всегда одинакова, тогда вы можете попробовать

string s = "731478718861993983";
s = s.Insert(2, "-");
s = s.Insert(7, "-");
s = s.Insert(12, "-");
s = s.Insert(17, "-"); 
0 голосов
/ 01 апреля 2011

Вот как бы я это сделал; это будет работать, только если вы храните числа как нечто, не являющееся строкой, поскольку они не могут использоваться со строками формата.

string numbers = "731478718861993983";
string formattedNumbers = String.Format("{0:##-####-####-####-####}", long.Parse(numbers));

Редактировать: исправленный код, поскольку вы сказали, что они содержались в виде строки в вашем исходном вопросе

0 голосов
/ 01 апреля 2011

Моя первая мысль:

String s = "731478718861993983";
s = s.Insert(3,"-");
s = s.Insert(8,"-");
s = s.Insert(13,"-");
s = s.Insert(18,"-");

(не помню, если индекс начинается с нуля, в этом случае вы должны использовать мои значения -1), но, вероятно, есть более простой способ сделать это...

0 голосов
/ 01 апреля 2011
string myString = 731478718861993983;
myString.Insert(2,"-");
myString.Insert(7,"-");
myString.Insert(13,"-");
myString.Insert(18,"-");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...