如何从字符串中移除逗号分隔的值?

7

我可以帮您将逗号分隔的值从字符串中删除。

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

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

我希望您能够将上述字符串中的“r”删除,并重新格式化字符串,如下所示:

我想从上面的字符串中删除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()));
                                    }
                                }
                            }

1
之后它必须再次成为一个字符串吗? - H H
1
不太清楚,请你能否示例说明一下你想要的内容? - Cybermaxs
1
预期输出是什么? - chaliasos
你真的需要更好地解释你的需求。比如说,你是想从字符串中删除 v,,得到 "r, l, m," 吗? - Jim Mischel
逗号分隔的字符串中是否包含空格?例如,在上面的示例中,除了从字符串中删除“r”之外,还要删除“v”前面的空格吗?分隔符实际上是“, ”吗?另外,您能解释一下为什么原始字符串末尾有一个逗号而新字符串没有的逻辑吗? - Chris
10个回答

18

只需执行类似以下操作:

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

4
谢谢,加1分。此外,我认为Split(',')是正确的,而Split(",")会出错。 - QMaster
救了我的一天!谢谢!! - Rapid99

3
像这样的内容吗?
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不会返回原始列表。您需要多个语句。但是,您不需要隐式地修剪末尾 ","。您可以从代码中删除该语句以及检查是否存在该项的检查。如果找到它,Remove将将其删除,如果未找到,则仅返回false。您不必检查存在性。因此,从第一个语句中删除TrimEnd并摆脱下面的第二行:

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

但是当我应用它时,它返回"true",而不是删除字符串后的字符串。我在问题中已经写出了我所应用的内容... - NoviceToDotNet
抱歉,remove方法不会返回原始列表。已进行编辑。 - Tombala

3

我不太确定你是什么意思,但这似乎是最简单和最易读的方法:

        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及以上版本。


3
感谢您提供的明确简洁的回答,但值得指出的是,这仅适用于 .net 4+,因为在 3.5 中,string.Join() 不会将 IEnumerable<string> 作为参数。 - Bob Sammers

2
String input = "r, v, l, m, ";

string itemToReplace = "v, ";

string output = input.Replace(itemToReplace, string.Empty)

输入在逗号后包含空格。 - Tim Schmelter
@Tim Schmelter:我更新了我的回答。 - Pankaj Agarwal

1

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

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

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

1

所以您想删除一个项目(或用另一个值替换它),然后再用逗号而不是空格重新连接字符串吗?

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

1

// 如果您想删除该项的所有出现,例如"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();

0

做法不对。你需要保留这个字符串吗?我觉得不需要。可以使用列表代替。你能有重复的吗?如果不能:

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

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

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