【问题标题】:c# how to replace an array string "" to "-"c#如何将数组字符串“”替换为“-”
【发布时间】:2018-09-15 08:32:24
【问题描述】:

我有

string data = "a,bn,,rf,,";

并拆分成一个字符串数组为

string []dataArray = data.Split(',',data);
and array become {"a", "bn", "", "", "rf", "", ""};

如何将"" 替换为"-"? 还有什么方便的方法吗?

感谢您的帮助。

【问题讨论】:

  • LINQ .Select 方法应该可以帮到你。
  • 带有iffor 循环?

标签: c# arrays string replace


【解决方案1】:

这是我之前写的一个扩展函数来实现这个

public static class Extensions
{
    public static string[] CustomSplit(this string toSplit, char delimiter, string emptyEntities) => 
        toSplit.Split(delimiter).Select(c => c == string.Empty ? emptyEntities : c).ToArray();
}

你可以像这样使用它

var result = "a,bn,,rf,,".CustomSplit(',', "-");

【讨论】:

  • 您不需要string.IsNullOrEmpty,因为Split 永远不会在结果数组中产生null 值。
  • 只用于空的部分,只需将其替换为 c == string.Empty
【解决方案2】:

这是一个非常简单直接的处理方法。

for(int i=0; i < dataArray.Length; i++)
{
    if(dataArray[i] == string.Empty)
    {
        dataArray[i] = "-";
    }
}

如果您想在拆分之前处理此问题,您可以使用正则表达式替换。 (我只包括这个,因为人们不断给出错误的字符串替换答案)

data = Regex.Replace(data, "(?<=^|,)(?=,|$)", "-");

这会检查字符串的开头或空字符串之前的逗号,然后是逗号或字符串的结尾,并用破折号替换该空字符串。

【讨论】:

    【解决方案3】:

    如果有机会,通常最好先更改对象的值,然后再将其更改为您打算使用的数据类型。

        string data = "a,bn,,rf,,";
        string replacementCharacter = "-";
        //if we know we want a hyphen character where a string.Empty would be, do it now.
    
        data = data.Replace(",,", "," + replacementCharacter + ",").Trim();
        if (data.EndsWith(",")) { data += "-"; }
        if (data.StartsWith(",")) { data = "-" + data; }
    

    那么你的数组就是你在突变时想要的样子,你不必查询数组或遍历它来修复它。

    编辑:更新它以调整空白最后索引和回车。

    【讨论】:

      【解决方案4】:

      您可以使用此代码,希望对您有所帮助。

      string data = "a,bn,,rf,,";
      string[] dataArray = data.Split(',').Select(c => { c = (c == "") ? "-" : c; return c; }).ToArray();
      

      【讨论】:

      • 为什么不只是c =&gt; c == "" ? "-" : c?这也基本上是 Ehsan 的回答。
      • 我没有查他的答案。
      【解决方案5】:

      迭代结果,然后检查结果是否为空或为空。如果是,则将其替换为 -。

      【讨论】:

      • 首先,这应该是一个评论,或者如果您包含一个示例这正是juharr did 的答案。无需重复答案。
      【解决方案6】:

      您可以使用Select() 投影拆分方法返回的结果并执行此操作:

      var result = data.Split(',')
                       .Select(d=> d == String.Empty ? "-" : d);
      

      现在给你:

      {“a”、“bn”、“-”、“-”、“rf”、“-”、“-”}

      如果您只需要使用this overload 的非空字符串,您也可以消除它们,例如:

      var result = data.Split(new char[] {','},StringSplitOptions.RemoveEmptyEntries);
      

      这会给你这样的结果:

      {"a", "bn", "rf"}

      【讨论】:

      • 他们想要{"a", "bn", "rf"} 还是{"a", "bn", "-", "-", "rf", "-", "-"}
      • @MattBeldon 第二个正是他们想要的。你认为他们想要什么?
      • @juharr 我写了那条评论,而答案只有前者,我认为 OP 想要后者。
      • @MattBeldon 答案总是有产生后者的代码。他们只是添加了结果。
      • 是的 Ehsan Sajjad ...谢谢,第二个 {"a", "bn", "-", "-", "rf", "-", "-"} 是我的想。谢谢
      【解决方案7】:

      没有 LINQ

      var result = data.Split(',', data).Replace(String.Empty, "-");
      

      【讨论】:

      • .Split(',', data) 不会编译
      • .Split().Replace 也不会编译!
      • 是的,必须检查拳头。多么失败(
      • Replace 是什么方法?
      • 我猜他认为.Split() 返回一个字符串?
      猜你喜欢
      • 2013-11-08
      • 1970-01-01
      • 1970-01-01
      • 2019-02-26
      • 2017-05-20
      • 2019-05-11
      • 2023-03-18
      • 1970-01-01
      • 2016-11-20
      相关资源
      最近更新 更多