创建包含空格(字符之间有一个空格)的随机字符串,并且第一个字符不是空格

本文关键字:空格 字符 第一个 字符串 包含 之间 有一个 创建 随机 | 更新日期: 2023-09-27 18:11:55

我有一个方法,它创建一个随机字符串,其中包含用户指定长度的空格。问题是,有时它会在字符串的开头插入空格,并创建连续的空格。我如何解决这个问题,使我的字符串在第一个字符中没有任何空格,但仍然可以在其他索引处有空格(非连续的)。请记住,我希望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();