删除字符串的最后一个字符

时间:2011-10-26 10:20:46

标签: c# string char

我正在检索列表中的大量信息,链接到数据库,我想为连接到网站的人创建一组字符串。

我用它来测试,但这不是动态的,所以非常糟糕:

string strgroupids = "6";

我现在想用它。但返回的字符串类似于1,2,3,4,5,

groupIds.ForEach((g) =>
{
    strgroupids = strgroupids  + g.ToString() + ",";
    strgroupids.TrimEnd(',');
});

strgroupids.TrimEnd(new char[] { ',' });

我想在,之后删除5,但它肯定无效。

11 个答案:

答案 0 :(得分:533)

strgroupids = strgroupids.Remove(strgroupids.Length - 1);

MSDN:

  

<强> String.Remove(的Int32):

     

从指定的开头删除此字符串中的所有字符   位置并继续通过最后一个位置

答案 1 :(得分:75)

这样做怎么样

strgroupids = string.Join( ",", groupIds );

很多清洁工。

它会在groupIds中附加','之间的所有元素,但每个元素都不会放置','

答案 2 :(得分:24)

c#中的字符串是不可变的。在您的代码中,您执行strgroupids.TrimEnd(',');strgroupids.TrimEnd(new char[] { ',' }); strgroupids字符串未被修改

您需要执行类似strgroupids = strgroupids.TrimEnd(',');的操作。

引用here

  

字符串是不可变的 - 字符串对象的内容不能   在创建对象后更改,尽管语法可以实现   好像你可以这样做。例如,当您编写此代码时,   编译器实际上创建了一个新的字符串对象来保存新的   字符序列,并将新对象分配给b。该   字符串“h”然后有资格进行垃圾收集。

答案 3 :(得分:9)

添加扩展方法。

public static string RemoveLast(this string text, string character)
{
    if(text.Length < 1) return text;
    return text.Remove(text.ToString().LastIndexOf(character), character.Length);
}

然后使用:

yourString.RemoveLast(",");

答案 4 :(得分:6)

删除任何尾随逗号:

while (strgroupids.EndsWith(","))
    strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

这是倒退的,你编写了首先添加逗号的代码。您应该使用string.Join(",",g),假设gstring[]。给它一个比g更好的名字!

答案 5 :(得分:3)

string strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    strgroupids = strgroupids + g.ToString() + ",";
});

strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);

请注意,此处使用ForEach通常被视为“错误”(例如http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx读取)

使用一些LINQ:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => p + q + ',');
strgroupids = strgroupids.Substring(0, str1.Length - 1);

没有end-substringing:

string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));

答案 6 :(得分:3)

作为为每个项添加逗号的替代方法,您只需使用String.Join:

var strgroupids = String.Join(",",  groupIds);

这将在数组中的每个元素之间添加分隔符(在本例中为“,”)

答案 7 :(得分:1)

除了sll的解决方案之外:如果最后有一些空白,最好修剪字符串。

strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1);

答案 8 :(得分:1)

string.Join更好,但如果你真的想要一个LINQ ForEach

var strgroupids = string.Empty;

groupIds.ForEach(g =>
{
    if(strgroupids != string.Empty){
        strgroupids += ",";
    }

    strgroupids += g;
});

一些注意事项:

  • string.Joinforeach都比这更好,速度慢得多
  • 无需删除最后一个,,因为它永远不会被追加
  • 增量运算符(+=)可以方便地附加到字符串
  • .ToString()是不必要的,因为在连接非字符串时会自动调用
  • 处理大字符串时,应考虑StringBuilder而不是连接字符串

答案 9 :(得分:0)

没有做到这一点的“快捷方式”。我通常这样做:

mystring= string.Concat(mystring.Take(mystring.Length-1));

答案 10 :(得分:0)

在C#8 ranges and indices中进行了介绍,为我们提供了一个更为简洁的新解决方案:

strgroupids = strgroupids[0..^1];
相关问题