繁体   English   中英

格式化MVC / C中的字符串#

[英]formatting string in MVC /C#

我有一个字符串731478718861993983,我想用C#获得这个73-1478-7188-6199-3983。 我该如何格式化呢?

谢谢。

通过使用正则表达式:

    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

如果你正在处理一个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拥有非常好的全球化支持 - 您可以更好地使用它!

string s = "731478718861993983"
var newString = (string.Format("{0:##-####-####-####-####}", Convert.ToInt64(s));

LINQ-only单线:

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('-');

这可以处理任意长度的字符串。

简单(和天真)的扩展方法:

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

如果您正在严格处理字符串,则可以创建一个简单的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}"

string myString = 731478718861993983;
myString.Insert(2,"-");
myString.Insert(7,"-");
myString.Insert(13,"-");
myString.Insert(18,"-");

我的第一个想法是:

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

(不记得索引是否从零开始,在这种情况下你应该使用我的值-1)但是可能有一些更简单的方法来做到这一点......

这是我怎么做的; 只有当你将数字存储为不是字符串的东西时它才会起作用,因为它们不能与格式字符串一起使用。

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

编辑:修改过的代码,因为你说它们是你原始问题中的一个字符串

如果“ - ”的位置始终相同,那么您可以尝试

string s = "731478718861993983";
s = s.Insert(2, "-");
s = s.Insert(7, "-");
s = s.Insert(12, "-");
s = s.Insert(17, "-"); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM