操纵字符串问题

本文关键字:问题 字符串 操纵 | 更新日期: 2023-09-27 18:00:51

如果我有一个字符串变量,其值如下:-

string mystring = "TYPE1, TYPE1, TYPE2, TYPE2, TYPE3, TYPE3, TYPE4, TYPE4";

我想操纵这个字符串并使其如下:-

string mystring = "TYPE1,TYPE2,TYPE3,TYPE4";

我想把里面所有的重复项都去掉,我该怎么做?

请帮忙。谢谢

操纵字符串问题

好吧,这里有一个LINQ方法:

string deduped = string.Join(",", original.Split(',')
                                          .Select(x => x.Trim())
                                          .Distinct());

请注意,我使用Trim是因为原始字符串在每个项之前都有一个空格,但结果没有。

Distinct()实际上并不能保证将保留排序,但当前的实现做到了这一点,这也是最自然的实现。我发现很难想象它会改变。

如果使用.NET 3.5,则需要在Distinct()之后调用.ToArray(),因为在.NET 4之前string.Join重载较少。

您可以执行以下操作:

var parts = mystring.Split(',').Select(s => s.Trim()).Distinct().ToList();
string newString = String.Join(",", parts);
string mystring = "TYPE1, TYPE1, TYPE2, TYPE2, TYPE3, TYPE3, TYPE4, TYPE4";
var split = mystring.Split(',');
var distinct = (from s in split select s).Distinct();

一个衬垫

string result = string.Join(",", mystring.Split(',').Select(s => s.Trim()).Distinct());

订购

如果需要,您也可以在行中添加OrderBy()来对字符串进行排序。

我个人会选择Jon Skeet的答案中的Linq选项,所以我也投了赞成票,但只是给你另一个选项

List<string> parts = new List<String>();
foreach(string split in mystring.Split(','))
    if(!parts.Contains(split))
        parts.Add(split);
string newstr = "";
foreach(string part in parts)
    newstr += part + ",";

这也适用于旧版本的C#。