6

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

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

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

10 回答 10

15

只需执行以下操作:

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());
于 2013-05-21T13:08:31.737 回答
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 及更高版本。

于 2013-05-21T13:16:34.070 回答
3

像这样的东西?

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

bool YourLogic(string x)
{
    return true;
}
于 2013-05-21T13:07:42.293 回答
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()))
于 2013-05-21T13:09:08.870 回答
2
String input = "r, v, l, m, ";

string itemToReplace = "v, ";

string output = input.Replace(itemToReplace, string.Empty)
于 2013-05-21T13:15:16.243 回答
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));
于 2013-05-21T13:10:12.807 回答
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();
于 2013-05-21T13:14:57.063 回答
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();
}
于 2013-05-21T13:08:18.110 回答
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"));
于 2016-04-26T11:22:04.797 回答
0

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

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

if (offIdColl.Contains(OfferID.ToString()))
{
    offIdColl.Remove(OfferID.ToString());
}
于 2013-05-21T13:08:13.440 回答