使用 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#)的主要内容,如果未能解决你的问题,请参考以下文章

将 List 转换为 String

如何将一维字符数组转换成字符串输出

PowerShell:如何在 PowerShell 中将数组对象转换为字符串?

将 list<int> 转换为连接的整数字符串?

C# String的Join()方法

Python中的join()函数的用法