Форматирование строки в MVC/С#
У меня есть строка 731478718861993983, и я хочу получить это 73-1478-7188-6199-3983 с помощью С#. Как я могу отформатировать его следующим образом?
Спасибо.
Ответы
Ответ 1
Если вы имеете дело с номером 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
С помощью regex:
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
Ответ 3
string s = "731478718861993983"
var newString = (string.Format("{0:##-####-####-####-####}", Convert.ToInt64(s));
Ответ 4
Только однострочный LINQ:
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 => [email protected]).
ToArray())).
ToArray()).
Trim('-');
Это может обрабатывать строки произвольных lenghs.
Ответ 5
Простой (и наивный) метод расширения:
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;
}
}
Ответ 6
Если вы имеете дело строго со строкой, вы можете сделать простое 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}"
.
Ответ 7
string myString = 731478718861993983;
myString.Insert(2,"-");
myString.Insert(7,"-");
myString.Insert(13,"-");
myString.Insert(18,"-");
Ответ 8
Моя первая мысль:
String s = "731478718861993983";
s = s.Insert(3,"-");
s = s.Insert(8,"-");
s = s.Insert(13,"-");
s = s.Insert(18,"-");
(не помните, если индекс основан на нуле, в этом случае вы должны использовать мои значения -1)
но, вероятно, есть несколько более простой способ сделать это...
Ответ 9
Вот как я это сделаю; он будет работать, только если вы храните цифры как нечто, что не является строкой, поскольку они не могут использоваться с строками формата.
string numbers = "731478718861993983";
string formattedNumbers = String.Format("{0:##-####-####-####-####}", long.Parse(numbers));
Изменить: измененный код, так как вы сказали, что они были проведены как строка в вашем исходном вопросе
Ответ 10
Если позиция "-" всегда одна и та же, вы можете попробовать
string s = "731478718861993983";
s = s.Insert(2, "-");
s = s.Insert(7, "-");
s = s.Insert(12, "-");
s = s.Insert(17, "-");