使用 String.Join 将数组转换为字符串后从字符串中删除多余的逗号(C#)
Posted
技术标签:
【中文标题】使用 String.Join 将数组转换为字符串后从字符串中删除多余的逗号(C#)【英文标题】:Removing extra commas from string after using String.Join to convert array to string (C#) 【发布时间】:2011-04-22 08:43:17 【问题描述】:我正在使用String.Join
将数组转换为字符串。我遇到的一个小问题是,在数组中一些索引位置将是空白的。下面是一个例子:
array[1] = "Firstcolumn"
array[3] = "Thirdcolumn"
通过使用 String.Join(",", array);,我会得到以下结果:
第一栏,,第三栏
注意多余的,.
如何从字符串中删除多余的逗号,或者在使用 String.Join 时最好不要包含空白索引?
【问题讨论】:
加入后使用string.Replace(",,", ","); @sh_kamalh 这不会处理“1,,,2”的情况。 【参考方案1】:试试这个:):
var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));
这将只连接不是null
或""
的字符串。
【讨论】:
我喜欢你正在解决问题的原因,而不仅仅是用黑客包扎问题!【参考方案2】:一个简单的解决方案是使用 linq,在加入之前过滤掉空项。
// .net 3.5
string.Join(",", array.Where(item => !string.IsNullOrEmpty(item)).ToArray());
在 .NET 4.0 中,如果您还想过滤掉空白或仅由空格字符组成的项目,您也可以使用 string.IsNullOrWhiteSpace
(请注意,在 .NET 4.0 中,您不必调用 @ 987654324@ 在这种情况下):
// .net 4.0
string.Join(",", array.Where(item => !string.IsNullOrWhiteSpace(item)));
【讨论】:
+1 在撰写本文时是提到 ToArray 的唯一答案(顺便说一句,这在 .NET 4 中是不必要的)。【参考方案3】:您可以使用 linq 删除空字段。
var joinedString = String.Join(",", array.Where(c => !string.IsNullOrEmpty(c));
【讨论】:
他特别问如何,不仅仅是理论上,尝试提供代码?【参考方案4】:String.Join(",", array.Where(w => !string.IsNullOrEmpty(w));
【讨论】:
【参考方案5】:扩展方法:
public static string ToStringWithoutExtraCommas(this object[] array)
StringBuilder sb = new StringBuilder();
foreach (object o in array)
if ((o is string && !string.IsNullOrEmpty((string)o)) || o != null)
sb.Append(o.ToString()).Append(",");
sb.Remove(sb.Length - 1, 1);
return sb.ToString();
【讨论】:
这根本不会插入任何逗号。但他想要逗号,而不是在空条目之后。 -1 字符串可以为空而不为空,在这种情况下,无论如何都会包含额外的逗号。 还是不行。当字符串不为空时,它永远不会到达o is string && !string.IsNullOrEmpty((string)o)
部分。
是的,我意识到并在您发布评论之前修复了它,它现在就像一个魅力!【参考方案6】:
正则表达式解决方案:
yourString = new Regex(@"[,]2,").Replace(yourString, @",");
【讨论】:
【参考方案7】:string.Join(",", Array.FindAll(array, a => !String.IsNullOrEmpty(a)));
这个怎么样?与 LINQ 解决方案相比的优缺点?至少它更短。
【讨论】:
【参考方案8】:string.Join(",", string.Join(",", array).Split(",", StringSplitOptions.RemoveEmptyEntries));
v('_')V
【讨论】:
【参考方案9】:简单的扩展方法
namespace System
public static class Extenders
public static string Join(this string separator, bool removeNullsAndWhiteSpaces, params string[] args)
return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args);
public static string Join(this string separator, bool removeNullsAndWhiteSpaces, IEnumerable<string> args)
return removeNullsAndWhiteSpaces ? string.Join(separator, args?.Where(s => !string.IsNullOrWhiteSpace(s))) : string.Join(separator, args);
用法:
var str = ".".Join(true, "a", "b", "", "c");
//or
var arr = new[] "a", "b", "", "c" ;
str = ".".Join(true, arr);
【讨论】:
以上是关于使用 String.Join 将数组转换为字符串后从字符串中删除多余的逗号(C#)的主要内容,如果未能解决你的问题,请参考以下文章