我想以一种简单的方式生成 500 个字符而不做:
String range = "0123456789101112131415...";
我想要一个精确的 500 个字符的字符串。
我怎样才能做到这一点?
Enumerable.Range(0,500).Select( c => c.ToString());
没有帮助,因为
数字 123 是 3 个字符而不是 1,这就是问题所在。
如果您不关心哪些字符,那么您可以使用 String 构造函数:
String s = new String('0', 500);
这将为您提供一个包含 500 个“0”的字符串。或者对于 500 X:
String s = new String('X', 500);
您想使用Aggregate:
string range = Enumerable.Range(0,500)
.Select(x => x.ToString()).Aggregate((a, b) => a + b);
Console.WriteLine(range);
这会给你一串从 0 到 500 的连接数字。像这样:01234567891011121314151617...
如果你需要从这个大字符串中取出 500 个字符,你可以进一步使用 substring。
string range = Enumerable.Range(0,500)
.Select(x => x.ToString()).Aggregate((a, b) => a + b);
Console.WriteLine(range.Substring(0, 500));
这应该可以解决问题。
var range = new string(String.Concat(Enumerable.Range(0, 500)
.Select(c => c.ToString()))
.Take(500).ToArray()
);
LINQ 很漂亮,但你并不总是需要它......:
static string NumString(int length) {
var s = "";
var i = 0;
while (s.Length < length) {
s += i.ToString();
i++;
}
return s.Substring(0, length);
}
或使用聚合的变体:
var str = Enumerable.Range(0, 500)
.Aggregate("", (s, next) => s += next.ToString(),
s => s.Substring(0, 500));
还有一个选项,不是原始问题所要求的输出——数字是随机的,而不是增加的——但相当简洁(我知道,OP 不需要一串随机数字,但无论如何这里都是一个)。
var rand = new Random();
string.Join("",Enumerable.Repeat(0, 500).Select(i => rand.Next(10)));
new string(Enumerable.Range(0,500).SelectMany(x => x.ToString()).Take(500).ToArray())
使用 LINQ 的最简单方法。由于字符串在技术上是可枚举的 (char[]),因此您可以使用 SelectMany(它将多个 Enumerables 并展平到一个集合中)后跟 Take(500) 仅获取 500 个字符,调用 ToArray 获取 char[]实例化一个新的字符串。