は、あなたが作成することができます。私はsizeOfStringパラメータで正確になりたい心に留めておいてください、私はまだ文字
のユーザーが指定した量であることを最終的な結果を必要とするこれが私の方法であり、ランダムな文字の無限のシーケンス、それらがスペースである間スキップして、あなたが望む文字の数を取る。
関数内に新しいランダムを宣言した場合、関数を頻繁に呼び出すと、ランダムな文字列が繰り返されます。
また、スペースの半分以上がスペースであるため、スペースの頻度が非常に高いので、これを軽減するために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();
あなたは何を試してみましたか?私はそれをやっている2つの本当に明白な方法を考えています。 –
TrimStart()。ToArray(); ' – Tim
TrimStart()' - 新しい文字列を返します(Enumerable.Repeat(chars、sizeOfString).Select(s => s [random.Next(s.Length)]) 'TrimStart'の問題は、' sizeOfString'で要求された文字列よりも短い文字列を持つ可能性があることです。 –