簡體   English   中英

C#:如何修改此代碼以使用連字符分隔字符串?

[英]C#: How do i modify this code to split the string with hyphens?

您好,我需要一些幫助來修改此代碼,以便將其用連字符分隔:

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

任何幫助,將不勝感激

無法抗拒正則表達式解決方案

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,則一定要使用該類型。

怎么樣:

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

看一下Guid可能是值得的,它會以xxxxxxxx-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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM