【问题标题】:Joining a string and separating it using multiple separators连接字符串并使用多个分隔符分隔它
【发布时间】:2016-06-04 02:08:02
【问题描述】:

我的currnt 方法将发送如下所示的交易列表:“name;quant;name;quant”等......

我希望能够像这样发送它:“(name;quant), (name;quant)”,这样客户就可以以更易读的方式获得它。

我在 MSDN 网站上没有看到这样做的方法,这里的示例都是用 Python 编写的。

     public void Send(Socket handler, List<String> trades)
        {
            //Converts List into string
            var result = string.Join(";", trades.ToArray());
            // Convert the string data to byte data using ASCII encoding.
            //calls the object to array method to convert it to a byte array
            byte[] byteData = Encoding.ASCII.GetBytes(result);

            // Begin sending the data to the remote device.
            handler.BeginSend(byteData, 0, byteData.Length, 0,
            new AsyncCallback(SendCallback), handler);
        }

【问题讨论】:

  • 如果List&lt;String&gt; 实际上应该是一个类或元组的列表,为什么还要它呢? (有名字和数量的东西)
  • 澄清一下:数组是这样的:"name", "quant", "name", "quant",还是"name;quant", "name;quant"?
  • 数组和前者一样...

标签: c# string join


【解决方案1】:

使用StringBuilder。

假设您的数据在格式列表中:“name;quant”,您可以使用:

StringBuilder sb = new StringBuilder();
sb.Append("(");
for (int i = 1; i <= trades.Count; i++)
{
    sb.Append(trades[i]);
    sb.Append(")");
    if (i < trades.Count)
    {
        sb.Append(", (");
    }
}

否则,如果您的列表类似于 "name","quant","name","quant" 你可以使用这个:

StringBuilder sb = new StringBuilder();
sb.Append("(");
for (int i = 1; i <= trades.Count; i++)
{
    sb.Append(trades[i]);
    if (i%2 == 0)
    {
        sb.Append(";");
    }
    else
    {
        sb.Append(")");
        if (i < trades.Count)
        {
            sb.Append(", (");
        }
    }              
}

【讨论】:

    【解决方案2】:

    如果每个trade 已经像name;quant:

    string result = trades.Count == 0 ? 
        string.Empty : 
        "(" + string.Join("), (", trades.ToArray()) + ")";
    

    请注意,在较新版本的 .NET 中,您不需要 trades.ToArray() 中的 .ToArray():

    string result = trades.Count == 0 ? 
        string.Empty : 
        "(" + string.Join("), (", trades) + ")";
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-09
      • 1970-01-01
      • 1970-01-01
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多