List.Exists 方法和几种字符串去重方法

来源:互联网 发布:淘宝差评改好评时间 编辑:程序博客网 时间:2024/05/17 10:40

  今天群里提了一个小问题:给出一个字符串"abcabc12345612ab";能不能用某种方式去除重复 字符,输出 "abc123456"的形式.

  我的想法是首先构造一个List,然后将打印后的字符传到List里面,如果List.Exists这个字符,就不输出,否则,添加到List里面,然后输出此字符.结果就差一秒啊,发现List.Exists 方法和我想的不一样,中间传的不是string,而是一个委托,晕(要用Contains).好好看看msdn,传送门在此,发现这个参数是一个委托,传入的是一个string参数,返回的是一个bool值.和Regex.Replace方法很像(指用法).看来委托确实很强大.虽然斗法失败,不过学习了一个新的知识,还好吧,哈哈.大笑


其实我觉得值得推荐的是几种方法:

1.建立零时变量,存储待输出字符.(如我上面描述的那样)

static void Main(){    string strTest = "abcabc12345612ab";    List<char> l = new List<char>();    foreach (char ch in strTest.ToCharArray())    {         if (!l.Contains(ch))         {             l.Add(ch);         }    }    System.Console.WriteLine(l.ToArray());    System.Console.ReadKey();}

形如创建string,char[]等等都是这种方式.

这个应该是 【普通青年】


2.使用LINQ,或者说泛型的方法

static void Main(){    string strTest = "abcabc12345612ab";                System.Console.WriteLine(strTest.ToCharArray().Distinct().ToArray());    System.Console.ReadKey();}

这个我感觉是比较合理和简洁的,不过需要对 .Net 类库有很熟悉的认识.

【文艺青年】


3.使用正则表达式

static void Main(){    string strTest = "abcabc12345612ab";    Regex reg = new Regex(@"(?'all'(?'start'.).*?)\k'start'");    while (strTest != (strTest = reg.Replace(strTest, "${all}"))) { }    System.Console.WriteLine(strTest);  //abc123456    System.Console.ReadKey();}

这个有点BT,虽然我个人很喜欢正则,但是这个实在有点狠.

分析了一下,大致的思路是:匹配一段字符串,这段字符的特点是:开始的字符和结尾的字符是一样的,比如"aba","123461".然后将结尾的字符去除,这样就减少了一个重复的字符,循环如此,直到字符串中没有重复的字符为止.向想出这种方法的q107770540( Tim [兔子党执行督察])致敬,佩服.

【变态青年】


END:条条大路通罗马,你是用什么方法来实现的呢?

原创粉丝点击