操纵字符串问题
本文关键字:问题 字符串 操纵 | 更新日期: 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#。