将字符串拆分为字符串数组而不丢失文本顺序

时间:2013-01-24 20:03:04

标签: c# arrays string split .net-2.0

我有一个问题,我被困了7天,所以我决定请你帮忙。这是我的问题:

我从datagridview(只有2个单元格)读取数据,并填写stringbuilder中的所有给定数据,其实际文章和价格如发票(账单)。现在我将stringbuilder中的所有内容添加到字符串中,意图将字符串分割成行,并且我的代码部分工作但不是我不会。文章是一个低于另一个,但价格是一个价格更多左边另一个更多权利而不是所有在一个垂直线,类似这样:

Bread  10$
Egg    4$
Milk   5$

我的代码:

string[] lines;
StringBuilder sbd = new StringBuilder();
foreach (DataGridViewRow rowe in dataGridView2.Rows)
{
    sbd.Append(rowe.Cells[0].Value).Append(rowe.Cells[10].Value);
    sbd.Append("\n");
}
sbd.Remove(sbd.Length - 1, 1);
string userOutput = sbd.ToString();
lines = userOutput.Split(new string[] { "\r", "\n" },    
StringSplitOptions.RemoveEmptyEntries);

2 个答案:

答案 0 :(得分:1)

您可以使用Trim方法删除现有的前导和尾随空格。使用PadRight,您可以自动添加正确数量的空格,以获得指定的总长度。

还可以使用自动增长的List<string>,而不是使用您之前将以前放在一起的内容分组得到的数组:

List<string> lines = new List<string>();
foreach (DataGridViewRow row in dataGridView2.Rows) {
    lines.Add( row.Cells[0].Value.ToString().Trim().PadRight(25) +
               row.Cells[10].Value.ToString().Trim());
}

但请记住,只有以等宽字体显示字符串(例如Courier NewConsolas)时,这种格式化方式才有效。像Arial这样的比例字体会产生锯齿状的列。

或者,您可以通过读取Count属性

中的行数来创建具有正确大小的数组
string[] lines = new string[dataGridView2.Rows.Count];
for (int i = 0; i < lines.Length; i++) {
    DataGridViewRow row = dataGridView2.Rows[i];
    lines[i] = row.Cells[0].Value.ToString().Trim().PadRight(25) +
               row.Cells[10].Value.ToString().Trim();
}

您还可以使用PadLeft方法来正确对齐金额

row.Cells[10].Value.ToString().Trim().PadLeft(10)

答案 1 :(得分:0)

你试过这个String Split method吗?

String myString = "Bread         ;10$;";

String articleName = myString.split(';')[0];
String price = myString.split(';')[1];