我正在检索列表中的大量信息,链接到数据库,我想为连接到网站的人创建一组字符串。
我用它来测试,但这不是动态的,所以非常糟糕:
string strgroupids = "6";
我现在想用它。但返回的字符串类似于1,2,3,4,5,
groupIds.ForEach((g) =>
{
strgroupids = strgroupids + g.ToString() + ",";
strgroupids.TrimEnd(',');
});
strgroupids.TrimEnd(new char[] { ',' });
我想在,
之后删除5
,但它肯定无效。
答案 0 :(得分:533)
strgroupids = strgroupids.Remove(strgroupids.Length - 1);
<强> 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)
,假设g
是string[]
。给它一个比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.Join
和foreach
都比这更好,速度慢得多,
,因为它永远不会被追加+=
)可以方便地附加到字符串.ToString()
是不必要的,因为在连接非字符串时会自动调用StringBuilder
而不是连接字符串答案 9 :(得分:0)
没有做到这一点的“快捷方式”。我通常这样做:
mystring= string.Concat(mystring.Take(mystring.Length-1));
答案 10 :(得分:0)
在C#8 ranges and indices中进行了介绍,为我们提供了一个更为简洁的新解决方案:
strgroupids = strgroupids[0..^1];