繁体   English   中英

C# 根据分隔符拆分接收到的字符串并保存到多个变量中

[英]C# split received string based on a separator and save into multiple variables

我有一个简单的套接字服务器,它正在从客户端接收一个字符串,现在我正在尝试拆分接收到的字符串并将其保存到多个变量中。

这是一个示例字符串(根据不同的客户端会有所不同):

Value0_Value1_Value2_Value3_Value4_END5

这是拆分字符串的代码部分:

if (content.IndexOf("END5") > -1)
{
    // All the data has been read from the
    // client. Display it on the console.  
    Console.WriteLine(content);

    //split the received string and save into Splitdata1 Arr[]
    string[] Splitdata1 = content.Split('_');

    //Save each split value into a separate variable
    string proce0 = Splitdata1[0];
    string proce1 = Splitdata1[1];
    string proce2 = Splitdata1[2];
    string proce3 = Splitdata1[3];
    string proce4 = Splitdata1[4];
    string proce5 = Splitdata1[5];

    //Print each value individually
    Console.WriteLine("individual strings: \n", "proce0", proce0,
                                                "\n", "proce1", proce1, 
                                                "\n", "proce2", proce2, 
                                                "\n", "proce3", proce3,
                                                "proce4", proce4, "\n",
                                                "proce5", proce5 );

    // Echo the data back to the client.  
    Send(handler, content);
}

这是我从客户端发送字符串时得到的控制台 output:

 Waiting for a connection... Value0_Value1_Value2_Value3_Value4_END5 individual strings: Sent 40 bytes to client.

我不确定它是否根本没有拆分字符串,或者它只是没有打印 6 个字符串变量。 我究竟做错了什么?

Console.Writeline(String, Object[])期望您提供复合格式字符串作为您的第一个参数,然后是使用该格式字符串写入的对象。 在您的情况下,您的第一个参数中没有任何索引占位符,因此随后的 arguments 将被忽略。

您可以通过将Console.WriteLine调用替换为以下内容来解决此问题:

Console.WriteLine("individual strings:\n" +
    $"proce0: {proce0}\n" +
    $"proce1: {proce1}\n" +
    $"proce2: {proce2}\n" +
    $"proce3: {proce3}\n" +
    $"proce4: {proce4}");

Console.WriteLine("individual strings: \n", "proce0", proce0,"\n", "proce1", proce1,"\n", "proce2", proce2, "\n", "proce3", proce3,"proce4", proce4, "\n","proce5", proce5 );

此行不会将字符串连接在一起。 第一个字符串需要包含您希望连接其他对象的位置。 像这样: Console.WriteLine($"individual strings: \n proce0: {proce0} \n proce1: {proce1} \n proce2: {proce2} \n proce3: {proce3} \n proce4: {proce4} \n proce5: {proce5}");

Console.WriteLine(string format, params object?[]? arg)不接受 arguments 这种方式。

您正在做的是尝试将对象插入到可格式化的字符串中,等效于使用string.Format 这将无法正常工作,因为您没有在字符串中指定索引。 它应该看起来像 -

// string.Format equivalent
Console.WriteLine("individual strings:\n" +
    "proce0: {0}\n" +
    "proce1: {1}\n" +
    "proce2: {2}", proce0, proce1, proce2);

// string interpolation
Console.WriteLine("individual strings:\n" +
    $"proce0: {proce0}\n" +
    $"proce1: {proce1}\n" +
    $"proce2: {proce2}");

还有一种方法可以在不指定每个变量的情况下做到这一点。 因此,即使您发送的数据超出预期,它也会在“_”字符上显示所有数据拆分。

Console.WriteLine("individual strings:")
foreach(var data in Splitdata1)
{
    Console.WriteLine(data);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM