连接一个字符串并使用多个分隔符将其分开

时间:2016-02-22 15:13:43

标签: c# string join

我的curernt方法将发送一个如下所示的交易列表:“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);
        }

2 个答案:

答案 0 :(得分:2)

使用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(", (");
        }
    }              
}

答案 1 :(得分:1)

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

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

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

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