TrimEnd不会删除最后的空格

时间:2013-09-12 11:05:54

标签: c# string trim

我想将选定的行从数据网格视图复制到剪贴板 它的工作完美,只有一件事:我没有成功从字符串中删除最后3个空格。 (我也尝试:clipboard.Remove(clipboard.Length - 3)clipboard.Trim(),但两者都不起作用)

我的功能:

private void menuCopyClipboard_wholeRow_Click(object sender, EventArgs e)
{
    #region calculate spaces
    int[] spaces = new int[8]; // I have 8 columns in the data grid view
    for (int i = 0; i < 8; i++)
        spaces[i] = 0;


    foreach (DataGridViewRow dgvr in datagridview1.SelectedRows)
        foreach (DataGridViewColumn dgvc in datagridview1.Columns)
        {
            int cellLength = datagridview1.Rows[dgvr.Index].Cells[dgvc.Index].FormattedValue.ToString().Length;
            if (spaces[dgvc.Index] < cellLength)
               spaces[dgvc.Index] = cellLength;
        }
    #endregion

    string clipboard = "";
    foreach (DataGridViewRow dgvr in datagridview1.SelectedRows)
    {
        foreach (DataGridViewColumn dgvc in datagridview1.Columns)
                clipboard += String.Format("{0, -" + spaces[dgvc.Index] + "}   ", // 3 spaces between columns
                                           datagridview1.Rows[dgvr.Index].Cells[dgvc.Index].FormattedValue.ToString());

        if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard += "\n"; // to not add enter after last line nor copy one line
    }

    clipboard.TrimEnd(); // <-- doens't erase spaces
    Clipboard.SetText(clipboard);
}

问题:没有删除的空间,如下图所示:

enter image description here

(问题:什么错?为什么没有删除空格?)

4 个答案:

答案 0 :(得分:2)

字符串是不可变的。

有人说,像TrimEnd()这样的字符串操作方法将始终返回一个新字符串。

这样做:

clipboard = clipboard.Trim();

只会解决您的问题。

如果您还需要删除\n,可以使用此功能:

char[] trimChars = new char[]{' ','\n'};
clipboard = clipboard.TrimEnd(trimChars);

答案 1 :(得分:1)

TrimEnd()从当前String对象中删除数组中指定的一组字符的所有尾随事件,并返回结果字符串,因此您应该接收转换后的字符串。

char[] charsToTrim = {' '};
clipboard = clipboard.TrimEnd(charsToTrim);

答案 2 :(得分:1)

在这一行

if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard += "\n"; // to not add enter after last line nor copy one line

你在字符串的结尾处添加了一个“\ n”,这样就可以防止Trim在添加“\ n”之前尝试修剪。

if (dgvr.Index != 0 && datagridview1.SelectedRows.Count > 1) clipboard = clipboard.Trim() + "\n"; // to not add enter after last line nor copy one line
else clipboard = clipboard.Trim();

答案 3 :(得分:0)

使用此

clipboard.Trim(); 

而不是:

clipboard.TrimEnd();