簡體   English   中英

創建包含空格(字符之間的一個空格)的隨機字符串,第一個字符不是空格

[英]Create random string that includes spaces (one space between characters), and first character is not a space

我有一個方法創建一個隨機字符串,其中包含用戶指定長度的空格。 問題是,有時它會在字符串的開頭插入空格,並創建連續的空格。 我如何解決這個問題,所以我的字符串在第一個字符中永遠不會有任何空格,但仍然可以在其他索引處有空格(非連續)。 請記住,我希望與sizeOfString參數完全匹配,因此我需要最終結果仍然是用戶指定的字符數量

這是我的方法:

    public static string CreateRandomString(int sizeOfString)
    {
        const string chars = "A b  C  D  e  F  g  H  I  1  2  3  4  5  6  7  8  ";

        var random = new Random();
        return new string(Enumerable.Repeat(chars, sizeOfString)
          .Select(s => s[random.Next(s.Length)]).ToArray());
    }

你可以創建一個無限的隨機字符序列,當它們是空格時跳過,然后取你想要的字符數。

如果在函數中聲明一個新的隨機數,那么如果你過於頻繁地調用該函數,則會重復隨機字符串。

此外,空格的頻率非常高,因為超過一半的字符是空格,你可以使用chars = " AbCDeFgHI12345678"來緩解這個問題。

private static Random random = new Random();

public static string CreateRandomString(int sizeOfString)
{
    const string chars = "A b  C  D  e  F  g  H  I  1  2  3  4  5  6  7  8  ";

    var randomChars =
        InitInfinite(() => chars[random.Next(chars.Length)])
            .SkipWhile(c => c == ' ')
            .Take(sizeOfString);

    return new string(randomChars.ToArray());
}

public static IEnumerable<T> InitInfinite<T>(Func<T> selector)
{
    while (true)
    {
        yield return selector();
    }
}

編輯 - 這里是版本2(最終版本):

public static string CreateRandomSentence(int sizeOfString)
{
    var sb = new StringBuilder();

    while (sb.Length < sizeOfString)
    {
        int wordLength = random.Next(8) + 1;
        sb.Append(CreateRandomString(wordLength)).Append(" ");
    }

    sb.Length = sizeOfString;

    return sb.ToString();
}

public static string CreateRandomString(int sizeOfString)
{
    const string chars = "AbCDeFgHI12345678";

    var randomChars =
        InitInfinite(() => chars[random.Next(chars.Length)])
            .SkipWhile(c => c == ' ')
            .Take(sizeOfString);

    return new string(randomChars.ToArray());
}

public static IEnumerable<T> InitInfinite<T>(Func<T> selector)
{
    while (true)
    {
        yield return selector();
    }
}

private static Random random = new Random();

暫無
暫無

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

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