c#一个字符串中如何去掉相同的字符

本文介绍了一种从字符串中去除重复元素的方法,通过使用Split()方法分割字符串,并利用ArrayList结合Contains方法实现对重复项的过滤,最后将处理后的元素重新组合成新的字符串。
在写程序的时候遇到一个算法,这个算法在编程的时候用到的几率会很大的,所以闲了就写给大家学习学习啦,这对初级程序员来说会有帮助的,也算是我的编程经验积累了啦!进入正题请看下边

有如下一个字符串:

    string str = "23,3,2,23,4,5,23,67,43,12,2,3,56";
        //这里说明一下str这个字符串可能还会很长有很多相同的字符
        string[] list = str.Split(',');
        string ret = string.Empty;

    ArrayList arrlist = new ArrayList();
        for (int i = 0; i < list.Length; i++)
        {
            if (!arrlist.Contains(list[i]))
            {
                arrlist.Add(list[i]);
            }
        }
        for (int i = 0; i < arrlist.Count; i++)
        {
            ret += arrlist[i] + ",";
        }
        TextBox1.Text = ret;

  

转载于:https://www.cnblogs.com/hww9011/archive/2013/04/07/3003512.html

<think>好的,我现在需要帮助用户解决如何在C#去掉字符串最后一个字符的问题。首先,我得回想一下用户提供的引用内容,看看有哪些方法已经被提到过。用户给出了三个引用,分别提到了Substring、TrimEnd和正则表达式的方法。 首先,用户的需求很明确,就是去掉字符串最后一个字符。我需要确保列举的方法都是有效的,并且正确引用用户提供的资料。引用3提到了Substring方法,这是最直接的方法,通过截取从0到长度减1的部分来实现。这个方法简单易懂,性能也比较好,应该是首选方法。 然后引用1提到TrimEnd方法,不过这里需要注意,TrimEnd通常用于去除末尾的某个字符的所有重复出现,比如多个空格。但用户提供的例子中,TrimEnd的参数是字符串的最后一个字符,这可能会导致误删其他相同字符的情况。比如如果字符串末尾有多个相同字符,使用TrimEnd会全部去掉,而不仅仅是最后一个。这点需要特别说明,避免用户在不适合的场景下使用。 引用2提到了使用正则表达式的方法,这个方法更灵活,可以处理更复杂的情况,比如同时去掉后指定的字符串。不过对于仅仅去掉最后一个字符的需求来说,正则表达式可能有点复杂,性能也可能不如Substring好。不过可以作为备选方案,尤其是当需要动态处理不同字符时。 接下来,我需要补充其他可能的方法,比如使用Remove方法。这个方法同样有效,直接在字符串长度减1的位置移除一个字符,代码也很简洁。另外,还可以考虑使用Span或者StringBuilder,不过这些可能适用于特定场景,比如处理非常大的字符串时,Span会有更好的性能,但一般情况可能用不到,不过还是可以提一下。 然后,我需要比较这些方法的优缺点,帮助用户根据具体情况选择。比如Substring和Remove在简单场景下效率高,代码简洁;TrimEnd需要注意使用场景;正则表达式灵活但效率较低;Span适用于高性能需求。 最后,整理这些方法,按照用户的要求,使用中文回答,结构清晰,分点说明,并在每个方法后正确添加引用标识。同时,生成相关问题,帮助用户进一步了解字符串处理的其他可能性。</think>在C#中去除字符串最后一个字符有5种典型方法,以下为具体实现和适用场景分析: 1. **Substring方法**(推荐基础方案) ```csharp string original = "Hello World!"; string result = original.Substring(0, original.Length - 1); ``` 通过截取从索引0到倒数第二个字符实现,时间复杂度$O(n)$,适用于明确知道要截取长度的场景[^3] 2. **Remove方法**(语法更直观) ```csharp string result = original.Remove(original.Length - 1); ``` 直接移除最后一位字符,语法更符合语义,效率与Substring相当 3. **TrimEnd方法**(需注意使用场景) ```csharp string result = original.TrimEnd(original[original.Length - 1]); ``` 通过指定要修剪的字符实现,但会删除所有尾部匹配字符,如原始字符串为"Test!!!", 会删除所有感叹号[^1] 4. **正则表达式**(处理复杂场景) ```csharp string result = Regex.Replace(original, ".$", ""); ``` 使用正则替换最后一个字符,支持模式匹配,但效率较低,适合需要动态匹配的场景[^2] 5. **Span优化**(高性能场景) ```csharp ReadOnlySpan<char> span = original.AsSpan(); string result = span.Slice(0, span.Length - 1).ToString(); ``` 通过内存切片实现零拷贝,处理大字符串时效率最优
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值