删除最后一个string
我正在检索链接到数据库的列表中的很多信息。
我想为连接到网站的人创build一个组的string。
我用这个testing…但是这不是dynamic的,所以它是非常糟糕的:
string strgroupids = "6";
我现在想用这个。 但是返回的string类似于1,2,3,4,5,
groupIds.ForEach((g) => { strgroupids = strgroupids + g.ToString() + ","; strgroupids.TrimEnd(','); }); strgroupids.TrimEnd(new char[] { ',' });
我想删除后, 5
但它绝对不能工作..有人可以帮助我吗?
strgroupids = strgroupids.Remove(strgroupids.Length - 1);
MSDN:
String.Remove(Int32)已:
从指定位置开始删除从该string开始的所有字符,并继续到最后一个位置
那么这样做呢?
strgroupids = string.Join( ",", groupIds );
更清洁。
它会在groupIds
所有元素之间添加一个','
,但是不会在末尾加上','
。
在C#中的string是不可改变的。 当你在你的代码中,你做strgroupids.TrimEnd(',');
或strgroupids.TrimEnd(new char[] { ',' });
strgroupids
string不被修改 。
你需要做一些像strgroupids = strgroupids.TrimEnd(',');
代替。
从这里引用:
string是不可变的 – string对象的内容在创build对象之后是不能改变的,尽pipe语法使得它看起来好像你可以做到这一点。 例如,编写这段代码时,编译器实际上会创build一个新的string对象来保存新的字符序列,并将该新的对象分配给b。 string“h”然后有资格进行垃圾收集。
添加一个扩展方法。
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(",");
删除任何结尾的逗号:
while (strgroupids.EndsWith(",")) strgroupids = strgroupids.Substring(0, strgroupids.Length - 1);
但是,这是倒退的,你写的代码,首先添加逗号。 你应该使用string.Join(",",g)
来代替,假设g
是一个string[]
。 给它一个比g
更好的名字!
作为为每个项目添加逗号的替代方法,您可以使用String.Join:
var strgroupids = String.Join(",", groupIds);
这将在数组中的每个元素之间添加分隔符(本例中为“,”)。
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);
没有结束子串:
string strgroupids = groupIds.Aggregate(string.Empty, (p, q) => (p != string.Empty ? p + "," + q : q.ToString()));
除了sll的解决scheme之外:如果最后还有一些空白,最好修整一下string。
strgroupids = strgroupids.Remove(strgroupids.Trim().Length - 1);
string.Join
更好,但如果你真的想要一个LINQ ForEach
:
var strgroupids = string.Empty; groupIds.ForEach(g => { if(strgroupids != string.Empty){ strgroupids += ","; } strgroupids += g; });
一些说明:
-
string.Join
和foreach
都比这个更好,方法慢得多 - 不需要删除最后一个
,
因为它从不附加 - 增量运算符(
+=
)可以方便地附加到string -
.ToString()
是不必要的,因为它在连接非string时被自动调用 - 处理大string时,应考虑使用
StringBuilder
而不是连接string