[英]Split string by (') and Spaces but keep any space character between two consecutive (')
[英]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.