2016-08-31 38 views
-1

我有一個存儲在ArrayList中的字符串列表。我想每次出現';'都要分割它們。問題是,每當我嘗試使用MessageBox顯示它們時,都會顯示多餘的空間或不必要的值。C#語法 - 刪除最後一次出現的';'從字符串拆分

樣品輸入(變量= A):

Arial;16 pt;None;None;None;None;None;None;FF0000;None;100;Normal;None;Normal; 

下面是一行代碼我用來分裂它們:

string[] display_document = (a[0] + "").Split(';'); 

代碼以顯示:

foreach (object doc_properties in display_document) 
{ 
    TextBox aa = new TextBox(); 
    aa.Font = new Font(aa.Font.FontFamily, 9); 
    aa.Text = doc_properties.ToString(); 
    aa.Location = new Point(pointX, pointY); 
    aa.Size = new System.Drawing.Size(80, 25); 
    aa.ReadOnly = true; 

    doc_panel.Controls.Add(aa); 
    doc_panel.Show(); 
    pointY += 30; 

} 

的輸出顯示如下: enter image description here

如何刪除最後一次出現的分號?我真的需要幫助解決這個問題。非常感謝你的幫助。

+2

使用'一個。修剪(';')。拆分(';')'或'a.TrimEnd(';')。拆分(';')'。 –

+3

這沒有任何意義。假設'a [0]'是你分號分隔的字符串,你的最後一項將是一個空字符串,而不是分號。 – Jonesopolis

+1

我認爲其他評論者錯過了一個重要的事實。 's.Split(';')'將返回一個其元素永遠不會包含分號的數組。或者至少它不應該。我無法重現這一點,但如果真的發生了這樣的事情,神祕的事情正在發生。 – recursive

回答

0

wouldnt最簡單的方法是檢查輸入是否以「;」結尾。在分裂它之前,如果是這樣,刪除最後一個字符?示例代碼:

string a = "Arial;16 pt;None;None;None;None;None;None;FF0000;None;100;Normal;None;Normal;"; 
     if (a.EndsWith(";")) 
     { 
      a = a.Remove(a.LastIndexOf(";")); 
     } 
     //Proceed with split 
+0

我認爲最簡單的選擇是使用'Split'的重載,它允許你使用'StringSplitOptions.RemoveEmptyEntries',但OP有在他的問題中給我們提供了矛盾的信息。 – Jonesopolis

+0

其實,不能出現在OP代碼中,所以這個答案的有用性等於我的第一條評論。 –

0

如果未添加空格字符並且輸入是字符串,Split將不會打印最後一個分號。

我不知道你爲什麼喜歡一個數組列表(這可能是這種奇怪的行爲的原因),但如果你可以使用你輸入一個字符串,你可以嘗試

string a = "Arial;16pt;None;None;None;None;None;None;FF0000;None;100;Normal;None;Normal;"; 
string[] display_document = a.Split(';'); 
foreach (object doc_properties in display_document) 
{ 
    //The rest of your code 
} 
相關問題