在添加到StringBuilder的字符串上循环

本文关键字:字符串 循环 StringBuilder 添加 | 更新日期: 2023-09-27 18:00:48

我有以下代码:

StringBuilder sb = new StringBuilder();
sb.Append("Ola");
sb.Append("Jola");
sb.Append("Zosia");

我可以使用forforeach迭代StringBuilder对象吗?

我可以显示其中的一个元素吗?例如Console.WriteLine(sb[0]);不起作用。

在添加到StringBuilder的字符串上循环

您似乎在寻找一个List<string>,您可以通过索引(list[n](和迭代(foreach (string s in list)(获得Add()字符串。

StringBuilder不支持这一点,因为它在内部连接所有输入,之后无法区分不同Append()调用的值。

要从字符串列表中获取连接字符串,请参阅将列表项附加到StringBuilder。

StringBuilder没有实现IEnumerable,所以您不能通过它来实现foreach,但您可以这样做:

StringBuilder sb = new StringBuilder();
sb.Append("Ola");
sb.Append("Jola");
sb.Append("Zosia");
for (int i = 0; i < sb.Length; i++)
{
    char c = sb[i];
    if (Char.IsUpper(c)) Console.Write(''n');
    Console.Write(c);
}
StringBuilder不是集合或数组。它只是一个提供了一些额外功能来处理字符串的类。它没有实现IEnumerable接口。

sb.Append方法只是像键入"text"+"其他一些文本"一样连接字符串,但在效率方面效果要好得多。事实上,每个"s1"+"s2"都会产生一个新字符串。如果你想做1000次这样的操作,它会一次又一次地创建新的字符串,并有很多额外的操作要做。StringBuilder提供了一种避免这种情况的方法,当它"渲染"字符串时,它会更新同一个字符串,而不是每次都创建新的距离。

如果你真的想使用StringBuilder,你可以使用一个扩展方法给你一个List,然后你可以用一个元素号来访问它。

internal static class ExtensionMethods
{
    public static List<string> ToList(this StringBuilder stringBuilder)
    {
        return stringBuilder.ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.None).ToList();
    }
}

然后,您可以通过调用ToList((方法来访问它。

int i = 0;
StringBuilder SB = new StringBuilder();
while (i++ != 1000000)
{
    SB.AppendLine(i.ToString());
}
string ChosenElement = SB.ToList()[1000];

我知道现在回答这个问题已经太晚了,但我希望其他人能从中得到帮助。

 public static void Main(string[] args)
    {
        StringBuilder sb = new StringBuilder("1");
        for(int i=2; i<= 300; i++){
                sb.Append(i+" this is test.~");
        }
        foreach(string s in sb.ToString().Split('~')){
        Console.WriteLine(s);
        }
    }

编辑:在您的示例中:

 StringBuilder sb = new StringBuilder();
     sb.Append("Ola~");
     sb.Append("Jola~");  
     sb.Append("Zosia~");
 //foreach loop ver sb object
  foreach(string s in sb.ToString().Split('~')){
         Console.WriteLine(s);
          }

通过使用这篇文章作为指导,我能够为一个非常相似的场景找到一个可行的解决方案:

替换字符串C#中的换行符

如果您可以使用sb.AppendLine,则可以通过换行符'''r'和'''n'拆分生成的ToString((

// e.g whereas you had:
StringBuilder sb = new StringBuilder();
sb.Append("Ola");
sb.Append("Jola");
sb.Append("Zosia");
// the scenario will only work if you did the following:
StringBuilder sb = new StringBuilder();
sb.AppendLine("Ola");
sb.AppendLine("Jola");
sb.AppendLine("Zosia");
// you can split your strings as follows:
string[] resultLines = TestResultStr.ToString().Split(new char[] { ''n', ''r' });
for (int i = 0; i < resultLines.Length; i++)
{
    Console.WriteLine(resultLines[i]);
}