我有一个构建地址字段的循环,其中一些字段在字符串末尾可能为空
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, , , , ,
如何从字符串中删除尾部“,”?
答案 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));