3

我想以一种简单的方式生成 500 个字符而不做:

String range = "0123456789101112131415..."; 

我想要一个精确的 500 个字符的字符串。

我怎样才能做到这一点?

Enumerable.Range(0,500).Select( c => c.ToString());

没有帮助,因为

数字 123 是 3 个字符而不是 1,这就是问题所在。

4

6 回答 6

13

如果您不关心哪些字符,那么您可以使用 String 构造函数:

String s = new String('0', 500);

这将为您提供一个包含 500 个“0”的字符串。或者对于 500 X:

String s = new String('X', 500);
于 2012-11-12T19:23:57.643 回答
2

您想使用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));
于 2012-11-12T19:25:58.030 回答
1

这应该可以解决问题。

var range = new string(String.Concat(Enumerable.Range(0, 500)
                                               .Select(c => c.ToString()))
                             .Take(500).ToArray()
                      );
于 2012-11-12T19:20:11.723 回答
1

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));
于 2012-11-12T19:23:58.223 回答
0

还有一个选项,不是原始问题所要求的输出——数字是随机的,而不是增加的——但相当简洁(我知道,OP 不需要一串随机数字,但无论如何这里都是一个)。

var rand = new Random();
string.Join("",Enumerable.Repeat(0, 500).Select(i => rand.Next(10)));
于 2013-11-07T03:49:30.717 回答
0
new string(Enumerable.Range(0,500).SelectMany(x => x.ToString()).Take(500).ToArray())

使用 LINQ 的最简单方法。由于字符串在技术上是可枚举的 (char[]),因此您可以使用 SelectMany(它将多个 Enumerables 并展平到一个集合中)后跟 Take(500) 仅获取 500 个字符,调用 ToArray 获取 char[]实例化一个新的字符串。

于 2012-11-12T19:45:24.287 回答