根据字符串构建器的长度在字符串构建器中添加文本/数字

问题描述 投票:-1回答:3

我想在显示之前在我的字符串生成器中添加数字(1,2,3)。如果字符串生成器包含2-它应该有这样的输出1)行文本2)行文本等

StringBuilder abc = new StringBuilder();
abc.Append("Hi.");
Fun(2, abc);
void Fun(int i, StringBuilder abc)
{
    if (i>0)
    abc.Append("its me.");
}

//在这里添加一些代码以检查if(abc.length> 0)//我们需要将1,2,3 ...附加到abc Console.WriteLine(abc.ToString())中的行;

我需要输出像

1)高。 2)我的。

c# string visual-studio
3个回答
3
投票

您可以将逻辑封装在不同的类中,并使用StringBuilder。

public class ExtendedStringBuilder
{
    private StringBuilder _sb;
    private int _callNumber;
    public ExtendedStringBuilder()
    {
        _sb = new StringBuilder();
        _callNumber = 0;
    }

    public void Append(string nextString)
    {
        _sb.AppendFormat("{0} {1}", ++_callNumber, nextString);
    }

    public override string ToString()
    {
        return _sb.ToString();
    }
}

在这种情况下,您不需要存储int值。这是样本:

static void Main(string[] args)
{
    var esb = new ExtendedStringBuilder();

    esb.Append("Hi.");
    esb.Append("its me.");
    Console.WriteLine(esb.ToString());
    Console.ReadLine();
}

2
投票

StringBuilder做这件事会非常困难,因为索引解析会非常困难。我用List<string>来达到同样的目的。

List<string> list = new List<string>();
list.Add("Hi");
list.Add("Its me!");

string s = String.Join(" ", list.Select(x => (list.IndexOf(x) + 1).ToString() + ")" + x));

Console.WriteLine(s);

这给出了输出

1)嗨2)我的!


0
投票

我建议使用Linq,把所有项目("Hi.""its me.")和摆脱StringBuilder

  using System.Linq;

  ... 

  // Or List<string> 
  string[] items = new string[] {
    "Hi.",
    "its me."
  };

  string result = string.Join(" ", items
    .Select((item, index) => $"{index + 1}){item}"));

您的代码已修改(List<string>而不是StringBuilder

  List<string> abc = new List<string>(); // List<string>, not StringBuider

  abc.Add("Hi.");

  Fun(2, abc);

  ...

  void Fun(int i, IList<string> abc) {
    if (abc.Any())
      abc.Add("its me.");
  }

  ...

  Console.WriteLine(string.Join(" ", abc
    .Select((item, index) => $"{index + 1}){item}"))); 
© www.soinside.com 2019 - 2024. All rights reserved.