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