【问题标题】:Removing extra commas from string after using String.Join to convert array to string (C#)使用 String.Join 将数组转换为字符串后从字符串中删除多余的逗号(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”的情况。

标签: c# string join


【解决方案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);
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2019-08-29
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-03-31
            • 2020-01-03
            相关资源
            最近更新 更多