1
"How do I do this?              "

假设我有这个字符串。如何从末尾只删除一个空格?下面显示的代码给我一个错误,说计数超出范围。

string s = "How do I do this?              ";
s = s.Remove(s.Length, 1);
4

6 回答 6

3

你只需要使用它:

string s = "How do I do this?              ";
s = s.Remove(s.Length-1, 1);

如此处所述:

Remove(Int32) 返回一个新字符串,其中当前实例中的所有字符(从指定位置开始到最后一个位置)都已被删除。

在数组中,位置的范围从 0 到 Length-1,因此会出现编译器错误。

于 2013-09-12T21:25:10.320 回答
2

C# 中的索引是从零开始的。

s = s.Remove(s.Length - 1, 1);
于 2013-09-12T21:25:22.420 回答
1

只需从第一个字符(字符在字符串中从 0 开始)做一个子字符串,然后将字符串长度减去 1 的字符数

s = s.Substring(0, s.Length - 1);
于 2013-09-12T21:25:18.653 回答
1

这样安全一点,以防最后一个字符不是空格

string s = "How do I do this?              ";
s = Regex.Replace(s, @" $", "")
于 2013-09-12T21:27:09.097 回答
0

另一种方法是;

string s = "How do I do this?              ";
s=s.SubString(0,s.Length-1);

额外的 :

如果您想对最后一个字符是否是空格或任何其他字符进行额外检查,可以通过这种方式进行;

    string s = "How do I do this?              a";//Just for example,i've added a 'a' at the end.
    int index = s.Length - 1;//Get last Char index.
    if (index > 0)//If index exists.
    {
        if (s[index] == ' ')//If the character at 'index' is a space.
        {
            MessageBox.Show("Its a space.");
        }
        else if (char.IsLetter(s[index]))//If the character at 'index' is a letter.
        {
            MessageBox.Show("Its a letter.");
        }
        else if(char.IsDigit(s[index]))//If the character at 'index' is a digit.
        {
            MessageBox.Show("Its a digit.");
        }
    }

这会给你一个带有消息“Its a letter”的 MessageBox。

如果您想创建一个等于 no 的字符串,还有一件事可能会有所帮助。每个单词之间的空格,然后你可以试试这个。

    string s = "How do I do this?              ";
    string[] words = s.Split(new char[] {' '},StringSplitOptions.RemoveEmptyEntries);//Break the string into individual words.
    StringBuilder sb = new StringBuilder();
    foreach (string word in words)//Iterate through each word.
    {
        sb.Append(word);//Append the word.
        sb.Append(" ");//Append a single space.
    }
    MessageBox.Show(sb.ToString());//Resultant string 'sb.ToString()'.

这给了你“我该怎么做?”(单词之间的相等空格)。

于 2013-09-12T21:35:23.270 回答
0

你必须在以下行中写一些东西

string s = "How do I do this?
s = s.Remove(s.Length-1, 1);

原因是在 C# 中,当引用数组中的索引时,第一个元素始终位于位置 0 并以 Length - 1 结束。长度通常告诉您字符串有多长,但不会映射到实际的数组索引。

于 2013-09-12T21:29:49.687 回答