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

时间:2009-10-10 10:33:33

标签: c# string

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

List<string> list = new List<string>();

//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, , , , , 

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

7 个答案:

答案 0 :(得分:26)

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

答案 1 :(得分:8)

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

尝试这样的事情:

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:2)

如果要删除添加的内容,请不要首先添加它们。此外,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

答案 4 :(得分:1)

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

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

  

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

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

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

  

asd,aaa,qwe,123123,somevalue

答案 5 :(得分:0)

试试这个:

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

答案 6 :(得分:0)

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

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