从字符串末尾删除多个char类型

我有一个构建地址字段的循环,其中一些字段在字符串的末尾可能是空的

List list = new List(); //list can contain any number of values, some of which might be "" (empty string) string returnValue = ""; for (int iRow = 1; iRow <= list.Count; iRow++) returnValue += String.Format("{0}, ", list[iRow]); returnValue = returnValue.Trim(); 

我的输出是

 asd, aaa, qwe, 123123, , , , , 

如何从字符串中删除尾随“,”?

 returnValue = returnValue.TrimEnd(' ', ','); 

您还应该避免在您的情况下使用字符串,而是使用StringBuilder。 避免使用感知格式 – 只需列出[iRow]是一个更好的选择。

尝试这样的事情:

 string result = string.Join(", ", list.Where(s => !string.IsNullOrEmpty(s)).ToArray()); 

string的TrimEnd静态方法允许指定应修剪哪些字符。

但是,在你的情况下,检查for循环是否有空槽是有意义的,并在最后将一个结果字符串与string.Join(字符串分隔符,字符串[]部分)放在一起

如果要删除添加的内容,请不要首先添加它们。 此外, StringBuilder类型更适合连接多个字符串,因为它具有更高的内存效率。

 StringBuilder sb = new StringBuilder(); for (int i = 0; i < list.Count; i++) { string rowValue = list[iRow]; if (!string.IsNullOrEmpty(rowValue)) { sb.Append(rowValue); sb.Append(", "); } } // use sb.ToString() to obtain result 

我讨厌做出假设,但我会因为看起来你想保留“差距”直到你走到尽头,在这种情况下你应该使用TrimEnd。 如果没有,则使用任何一个其他选项以避免首先添加空值。

更准确地说,如果您的输出看起来像:

asd,aaa,qwe,123123 ,,, somevalue ,,

然后你必须循环并使用TrimEnd。

否则,如果您可以折叠字段,则预先排除容器。

asd,aaa,qwe,123123,somevalue

试试这个:

 List list = new List( new string[]{"asd", "aaa", "qwe", "123123", "", null, "", null, ""}); return String.Join(", ", list.Where(i => !String.IsNullOrEmpty(i)).ToArray()); 

我意识到这是非常难以理解的并且浪费但是(没有linq):

 return string.Join(" ,",string.Join(", ",list.ToArray()).Split(", ", StringSplitOptions.RemoveEmptyEntries));