簡體   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