2016-08-31 35 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 
} 
相关问题