C#:如何修改此代码以使用连字符拆分字符串?

C#:如何修改此代码以使用连字符拆分字符串?,c#,string,split,C#,String,Split,您好,我需要一些帮助来修改此代码,以便使用连字符拆分此字符串: string KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"; 我想这样说: 1234-1234-1234-1234-1234 每段的字符长度为4,最大字符数约为16 完整代码 private static string GetKey() { char[] chars = new char[6

您好,我需要一些帮助来修改此代码,以便使用连字符拆分此字符串:

string KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
我想这样说:

1234-1234-1234-1234-1234

每段的字符长度为4,最大字符数约为16

完整代码

     private static string GetKey()
    {
        char[] chars = new char[62];
        string KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
        chars = KeyString.ToCharArray();

        RNGCryptoServiceProvider crypto = new RNGCryptoServiceProvider();

        byte[] data = new byte[1];
        crypto.GetNonZeroBytes(data);
        data = new byte[8];
        crypto.GetNonZeroBytes(data);

        StringBuilder result = new StringBuilder(8);

        foreach (byte b in data)
        {
            result.Append(chars[b % (chars.Length - 1)]);
        }

        return result.ToString();
    }
该代码用于生成随机ID

任何帮助都将不胜感激

那么:

StringBuilder result = new StringBuilder();
for (var i = 0; i < data.Length; i++)
{
    if (i > 0 && (i % 4) == 0)
        result.Append("-");

    result.Append(chars[data[i] % (chars.Length - 1)]);
}
result.Length -= 1; // Remove trailing '-'
StringBuilder结果=新建StringBuilder();
对于(变量i=0;i0&(i%4)==0)
结果。追加(“-”);
结果.追加(字符[数据[i]%(字符长度-1)]);
}
结果。长度-=1;//删除尾随的“-”
那么:

StringBuilder result = new StringBuilder();
for (var i = 0; i < data.Length; i++)
{
    if (i > 0 && (i % 4) == 0)
        result.Append("-");

    result.Append(chars[data[i] % (chars.Length - 1)]);
}
result.Length -= 1; // Remove trailing '-'
StringBuilder结果=新建StringBuilder();
对于(变量i=0;i0&(i%4)==0)
结果。追加(“-”);
结果.追加(字符[数据[i]%(字符长度-1)]);
}
结果。长度-=1;//删除尾随的“-”

>P>它可能值得一看,它在XXXXXXX-XXXX-XXXX-XXXXXXXX(32字符)中产生字符串,如果你确实想要16个字符,你可以在GUID生成的32的中间取16个字符。
Guid guid = Guid.NewGuid(); /* f.e.: 0f8fad5b-d9cb-469f-a165-70867728950e */
string randomid = guid.ToString().Substring(4, 19);

值得一看的是,它在字符串XXXXXXX-XXXX-XXXX-XXXXXXXX(32字符)中产生字符串,如果你确实想要16个字符,你可以在GUID生成的32的中间取16个字符。
Guid guid = Guid.NewGuid(); /* f.e.: 0f8fad5b-d9cb-469f-a165-70867728950e */
string randomid = guid.ToString().Substring(4, 19);

不能。。。抵抗。。。正则表达式。。。解决方案

string KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

Console.WriteLine(
    new System.Text.RegularExpressions.Regex(".{4}")
    .Replace(KeyString, "$&-").TrimEnd('-'));
输出

abcd-efgh-ijkl-mnop-qrst-uvwx-yzAB-CDEF-GHIJ-KLMN-OPQR-STUV-WXYZ-1234-5678-90

但是是的,如果这是一个Guid,请务必使用该类型。

无法。。。抵抗。。。正则表达式。。。解决方案

string KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

Console.WriteLine(
    new System.Text.RegularExpressions.Regex(".{4}")
    .Replace(KeyString, "$&-").TrimEnd('-'));
输出

abcd-efgh-ijkl-mnop-qrst-uvwx-yzAB-CDEF-GHIJ-KLMN-OPQR-STUV-WXYZ-1234-5678-90

但是是的,如果这是一个Guid,请务必使用该类型。

对不起,我完全不知道该怎么做。你说了一件事,然后发了一条代码,做了一件绝对不相关的事。拆分或控制台输入与该代码有什么关系?你想分什么?顺便说一下,代码可以大大优化,但那是另一件事。你知道生成随机id的代码与用于拆分字符串的代码完全无关吗?对不起,我是新手,我需要将字符串键串拆分为4个不同的id段到c#控制台中,例如:1234-1234-1234-1234,用连字符分隔,虽然措辞不好,但很有用对不起,我完全不知所措。你说了一件事,然后发了一条代码,做了一件绝对不相关的事。拆分或控制台输入与该代码有什么关系?你想分什么?顺便说一下,代码可以大大优化,但那是另一件事。你知道生成随机id的代码与用于拆分字符串的代码完全无关吗?对不起,我是新手,我需要将字符串键串拆分为4个不同的id段到c#控制台中,例如:1234-1234-1234-1234,用连字符分隔,虽然措辞不好,但很有用问题