操纵字符串问题

时间:2011-06-29 08:12:30

标签: c# asp.net

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

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

我想操纵这个字符串并按如下方式进行操作: -

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

即我想删除其中的所有副本,我应该怎么做?

请帮忙。感谢。

5 个答案:

答案 0 :(得分:11)

嗯,这是一个LINQ方法:

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

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

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

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

答案 1 :(得分:2)

您可以执行以下操作:

var parts = mystring.Split(',').Select(s => s.Trim()).Distinct().ToList();
string newString = String.Join(",", parts);

答案 2 :(得分:1)

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

var split = mystring.Split(',');
var distinct = (from s in split select s).Distinct();

答案 3 :(得分:1)

一个班轮

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

订货?

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

答案 4 :(得分:1)

我个人会在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#。