【问题标题】:split string to string array without loosing text order将字符串拆分为字符串数组而不丢失文本顺序
【发布时间】:2023-04-02 11:56:01
【问题描述】:

我有一个问题困扰了我 7 天,所以我决定向您寻求帮助。这是我的问题:

我从 datagridview 读取数据(只有 2 个单元格),并在 stringbuilder 中填写所有给定的数据,它实际上是文章和价格,如发票(账单)。现在,我将在 stringbuilder 中获得的所有内容添加到 string 中,目的是在 line 下拆分 string 行,我的代码的那部分工作但不是我不会的。文章在另一个之下,但价格是一个价格再左另一个更右,而不是全部在一条垂直线上,如下所示:

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);

【问题讨论】:

  • 为什么不直接构建lines[]

标签: c# arrays string split .net-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)

【讨论】:

    【解决方案2】:

    你试过这个String Split method 吗?

    String myString = "Bread         ;10$;";
    
    String articleName = myString.split(';')[0];
    String price = myString.split(';')[1];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 1970-01-01
      • 2012-02-22
      相关资源
      最近更新 更多