[英]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.