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

  今天群里提了一个小问题:给出一个字符串"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:条条大路通罗马,你是用什么方法来实现的呢?

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值