C# 如何从字符串中删除逗号分隔的值?

C# 如何从字符串中删除逗号分隔的值?,c#,C#,我想从字符串中删除逗号分隔的值 假设我有一根这样的绳子 string x="r, v, l, m" 我想从上面的字符串中去掉r,然后像这样重新构造字符串 string x="v, l, m" 从上面的字符串中,我想删除我的逻辑抛出的任何值并重新构造字符串。 它应该删除旁边的值和逗号,并重新设置字符串 以下是我的代码特有的。。 我想删除从逻辑中得到的任何值,我想删除它和它旁边的逗号,并在删除的项上没有空格的情况下重新生成字符串。。我怎样才能做到这一点 offIdColl = my_Order

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

假设我有一根这样的绳子

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,我这样应用它,但它不起作用,它返回真值

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

像这样的

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

bool YourLogic(string x)
{
    return true;
}

这是不对的。你需要保留绳子吗?我怀疑你会。只需使用列表即可。你能要复本吗?如果没有:

offIdColl = my_Order.CustomOfferAppliedonOrder.TrimEnd(',').Split(',');

if (offIdColl.Contains(OfferID.ToString()))
{
    offIdColl.Remove(OfferID.ToString());
}

只需做如下操作:

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());
List Items=x.Split(“,”)。选择(i=>i.Trim())。其中(i=>i!=string.Empty)。ToList()//将它们全部拆分并删除空格
项目。删除(“v”)//或者随便你想要什么
string NewX=string.Join(“,”,Items.ToArray());
编辑:对不起,你说得对。删除不会返回原始列表。您需要多个语句。但是你不需要刻意地修剪末端。您可以从代码中删除该语句,也可以检查该项是否存在。如果找到了,则删除操作会将其取出;如果未找到,则简单地返回false。你不必检查存在。因此,从第一行拆下装饰条,并去掉下面的第二行:

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

那么,您想删除一个项(或用另一个值替换它)并再次使用逗号(不带空格)连接字符串吗

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

//如果要删除该项目的所有出现项,请使用“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();

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

        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及更高版本。

在许多方面,这只是一行代码,下面是其中两行:

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

然后它又必须是一个字符串?不清楚,你能给出一个你想要的例子吗?预期的输出应该是什么?你真的需要更好地解释你的需求。例如,您是否试图从字符串中删除
v,
,从而导致
“r,l,m”
?空格是否为逗号分隔字符串的一部分?在上面的例子中,除了从字符串中删除“r”外,还要删除“v”之前的空格?分隔符实际上是“,”吗?您还可以解释为什么原始字符串末尾有逗号而新字符串没有逗号的逻辑吗?输入在逗号后包含空格。@Tim Schmelter:我更新了应答器,但当我应用此选项时,它会在删除字符串后返回“true”,而不是字符串。我在上面的问题中写下了我的申请…我的坏,删除不会返回原始列表。已编辑。+1以获得清晰、简洁的答案,但值得指出的是,它仅在.net 4+中有效,因为string.Join()在3.5中不会将IEnumerable作为参数。谢谢,还有一点。此外,我认为分割(“,”)是正确的,分割(“,”)有错误。挽救了我的一天!谢谢
String input = "r, v, l, m, ";

string itemToReplace = "v, ";

string output = input.Replace(itemToReplace, string.Empty)
        string x = "r, v, l, m";
        string valueToRemove = "r";
        var result = string.Join(", ", from v in x.Split(',')
                                       where v.Trim() != valueToRemove
                                       select v);
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"));