使用String.Join将数组转换为字符串后,从字符串中删除多余的逗号(C#)

49

我正在使用String.Join将一个数组转换为字符串。我的一个小问题是,在数组中有些索引位置是空的。以下是一个示例:

array[1] = "Firstcolumn"
array[3] = "Thirdcolumn"

通过使用 String.Join(",", array);,我将得到以下结果:

 

第一列,,第三列

请注意多余的逗号,.

如何从字符串中删除额外的逗号,或者在使用 String.Join 时理想情况下不包括空索引?


在连接之后使用 string.Replace(",,", ","); - sh_kamalh
5
那无法处理 "1,,,2" 的情况。 - Even Mien
9个回答

87

试着这样做 :):

var res = string.Join(",", array.Where(s => !string.IsNullOrEmpty(s)));

这将仅连接非null""的字符串。


17
我喜欢你着手解决问题的根本原因,而不是仅仅用权宜之计来处理问题! - TK.

34

使用LINQ过滤空项后再进行连接是一个简单的解决方案。

// .net 3.5
string.Join(",", array.Where(item => !string.IsNullOrEmpty(item)).ToArray());
在.NET 4.0中,你也可以使用string.IsNullOrWhiteSpace,如果你想过滤掉空白或仅由空格字符组成的项目(请注意,在这种情况下,你不必调用ToArray)。
// .net 4.0
string.Join(",", array.Where(item => !string.IsNullOrWhiteSpace(item)));

4
在写作时唯一提到ToArray的回答得到了+1的赞同(顺便说一下,在.NET 4中ToArray是不必要的)。 - Mark Byers

3
你可以使用linq来删除空字段。
var joinedString = String.Join(",", array.Where(c => !string.IsNullOrEmpty(c));

他特别问了如何提供代码,而不仅仅是理论上的。 - Richard J. Ross III

1

扩展方法:

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();
}

这将不会插入任何逗号。但他“想要”逗号,只是不想在空条目后面加上逗号。 - gehho
-1 字符串可以为空而不是null,在这种情况下,额外的逗号仍然包括在内。 - bernhof
仍然无法工作。当字符串不为空时,它永远不会到达o is string && !string.IsNullOrEmpty((string)o)部分。 - bernhof
没错,我意识到了并在你发表评论之前修复了它,现在它运行得非常好! - Richard J. Ross III

1
String.Join(",", array.Where(w => !string.IsNullOrEmpty(w));

1

正则表达式解决方案:

yourString = new Regex(@"[,]{2,}").Replace(yourString, @",");

0
string.Join(",", Array.FindAll(array, a => !String.IsNullOrEmpty(a)));

这个怎么样?与LINQ解决方案相比的优缺点是什么?至少它更短。

0

简单的扩展方法

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);

0
string.Join(",", string.Join(",", array).Split({","}, StringSplitOptions.RemoveEmptyEntries));

v('_)V


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接