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

时间:2011-06-26 07:28:20

标签: c# string split

你好我需要一些帮助来修改这段代码,所以它用连字符分割这个字符串:

string KeyString = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";

我想这样说出来:

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

任何帮助将不胜感激

3 个答案:

答案 0 :(得分:3)

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

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,请务必使用该类型。

答案 1 :(得分:2)

怎么样:

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 '-'

答案 2 :(得分:0)

查看Guid可能是值得的,它会以xxxxxxxx-xxxx-xxxx-xxxxxxxx(32个字符)的格式生成字符串,如果你肯定需要16个字符,你可以使用16个字符。由Guid生成的32中间。

Guid guid = Guid.NewGuid(); /* f.e.: 0f8fad5b-d9cb-469f-a165-70867728950e */
string randomid = guid.ToString().Substring(4, 19);