【问题标题】:How to remove comma separated value from a string?如何从字符串中删除逗号分隔值?
【发布时间】:2016-04-26 19:22:04
【问题描述】:

我想从字符串中删除一个逗号分隔的值..

假设我有一个这样的字符串

string x="r, v, l, m"

我想从上面的字符串中删除 r,然后像这样修改字符串

string x="v, l, m"

从上面的字符串中,我想删除我的逻辑抛出的任何值并重新调整字符串。 它应该删除它旁边的值和逗号并重新调整字符串...


以下是特定于我的代码.. 我想删除从逻辑中获得的任何值,我想删除它和它旁边的逗号,并在已删除的项目上重新设置没有空格的字符串。我该如何实现这一点?

offIdColl = my_Order.CustomOfferAppliedonOrder.TrimEnd(',');
if (offIdColl.Split(',').Contains(OfferID.ToString()))
{
    // here i want to perform that operation.   

}

Tombala,我是这样应用的,但它不起作用..它返回 true

 if (!string.IsNullOrEmpty(my_Order.CustomOfferAppliedonOrder))
                                {
                                    offIdColl = my_Order.CustomOfferAppliedonOrder.TrimEnd(',');
                                    if (offIdColl.Split(',').Contains(OfferID.ToString()))
                                    {
                                        string x = string.Join(",", offIdColl.Split(new char[] { ',' },
    StringSplitOptions.RemoveEmptyEntries).ToList().Remove(OfferID.ToString()));
                                    }
                                }
                            }

【问题讨论】:

  • 然后一定又是字符串?
  • 不清楚,你能举一个你想要的例子吗?
  • 预期的输出应该是什么?
  • 您确实需要更好地解释您的要求。例如,您是否尝试从字符串中删除v, ,从而导致"r, l, m,"
  • 逗号分隔字符串的空格部分吗?即在上面的示例中,从字符串中删除“r”,还要删除“v”之前的空格?分隔符实际上是“,”吗?你能解释一下为什么原始字符串末尾有逗号而新字符串没有逗号的逻辑吗?

标签: c#


【解决方案1】:

只需执行以下操作:

List<String> Items = x.Split(",").Select(i => i.Trim()).Where(i => i != string.Empty).ToList(); //Split them all and remove spaces
Items.Remove("v"); //or whichever you want
string NewX = String.Join(", ", Items.ToArray());

【讨论】:

  • 谢谢,1分。另外我认为 Split(',') 是正确的,而 Split(",") 出错了。
  • 拯救了我的一天!谢谢!!
【解决方案2】:

这样的?

string input = "r,v,l,m";
string output = String.Join(",", input.Split(',').Where(YourLogic));

bool YourLogic(string x)
{
    return true;
}

【讨论】:

    【解决方案3】:
    var l = x.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).ToList();
    l.Remove(OfferID.ToString());
    x = string.Join(",", l);
    

    编辑:对不起,你是对的。删除不会返回原始列表。您需要多个语句。但是您不需要隐式修剪结尾的“,”。您可以从代码中删除该语句以及检查该项目是否存在。如果找到, Remove 会将其取出,如果未找到,则简单地返回 false。您不必检查存在。所以从第一行删除 TrimEnd 并去掉下面的第二行:

    offIdColl = my_Order.CustomOfferAppliedonOrder; //.TrimEnd(',');
    //if (offIdColl.Split(',').Contains(OfferID.ToString()))
    

    【讨论】:

    • 但是当我应用它时它返回“true”,而不是删除字符串后的字符串。我在我应用的问题中将其写在上面...
    • 我的错,删除不会返回原始列表。已编辑。
    【解决方案4】:

    不太确定这是否是您的意思,但这似乎最简单且最易读:

            string x = "r, v, l, m";
            string valueToRemove = "r";
            var result = string.Join(", ", from v in x.Split(',')
                                           where v.Trim() != valueToRemove
                                           select v);
    

    编辑:就像 Bob Sammers 指出的那样,这只适用于 .NET 4 及更高版本。

    【讨论】:

    • +1 以获得清晰、整洁的答案,但值得指出的是,它仅适用于 .net 4+,因为 string.Join() 在 3.5 中不会将 IEnumerable 作为参数。
    【解决方案5】:
    String input = "r, v, l, m, ";
    
    string itemToReplace = "v, ";
    
    string output = input.Replace(itemToReplace, string.Empty)
    

    【讨论】:

    • 输入包含逗号后的空格。
    • @Tim Schmelter:我更新了我的答案
    【解决方案6】:
    public void string Remove(string allStuff, string whatToRemove)
    {
      StringBuilder returnString = new StringBuilder();
      string[] arr = allStuff.Split('');
       foreach (var item in arr){
         if(!item.Equals(whatToRemove)){
         returnString.Append(item);
         returnString.Append(", "); 
        }
       }
      return returnString.ToString();
    }
    

    【讨论】:

      【解决方案7】:

      所以你想删除一个项目(或用另一个值替换它)并用逗号再次加入字符串?

      string x = "r, v, l, m,";
      string value = "v";
      string[] allVals = x.TrimEnd(',').Split(new []{','}, StringSplitOptions.RemoveEmptyEntries);
      // remove all values:
      x = string.Join(",", allVals.Where(v => v.Trim() != value));
      // or replace these values
      x = string.Join(",", allVals.Select(v => v.Trim() == value ? "new value" : v));
      

      【讨论】:

        【解决方案8】:

        //如果你想删除所有出现的项目,说“a”你可以使用

          String data = "a, b, c, d, a, e, f, q, a";
        
          StringBuilder Sb = new StringBuilder();
        
          foreach (String item in data.Split(',')) {
            if (!item.Trim().Equals("a", StringComparison.Ordinal)) {
              if (Sb.Length > 0) 
                Sb.Append(',');
        
              Sb.Append(item);
            }
          }
        
          data = Sb.ToString();
        

        【讨论】:

          【解决方案9】:

          在很多方面它只是一行代码,其中两个如下:

          string x = "r,v,l,m";
          string NewX = String.Join(",", from i in x.Split(',') where  i != String.Empty && i != "v" select i);
          
          OR
          
          string NewX = String.Join(",", x.Split(',').Select(i => i.Trim()).Where(i => i != String.Empty && i != "v"));
          

          【讨论】:

            【解决方案10】:

            不打算这样做。你需要保留字符串吗?我怀疑你会。只需使用列表即可。可以复制吗?如果没有:

            offIdColl = my_Order.CustomOfferAppliedonOrder.TrimEnd(',').Split(',');
            
            if (offIdColl.Contains(OfferID.ToString()))
            {
                offIdColl.Remove(OfferID.ToString());
            }
            

            【讨论】:

              猜你喜欢
              • 2021-05-19
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2019-02-12
              • 2016-05-21
              • 2021-05-14
              • 1970-01-01
              相关资源
              最近更新 更多