【问题标题】:Easiest way to eliminate "insignificant" duplicate characters in a string消除字符串中“无关紧要”的重复字符的最简单方法
【发布时间】:2012-10-09 03:56:59
【问题描述】:

我有一个类似于“foo-bar----baz--biz”的字符串

消除无关紧要的重复字符(-)并使字符串“foo-bar-baz-biz”的最简单和最快的方法是什么?

我已经尝试过类似.Replace("--","-") 的操作,但这似乎只能在一定程度上起作用。我必须循环运行它才能完全做到这一点,而且我知道有更好的方法。

最好的方法是什么?

【问题讨论】:

    标签: c# .net string


    【解决方案1】:

    试试这个,

    string finalStr = string.Join("-", x.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries))
    

    如果将其转换为 Extension method 会更好

    static class StringExtensions 
    {
        public static string RemoveExtraHypen(this string str) 
        {
            return string.Join("-", str.Split(new []{'-'}, StringSplitOptions.RemoveEmptyEntries));
        }
    }
    

    用法

    private void SampleDemo()
    {
        string x = "foo-bar----baz--biz";
        Console.WriteLine(x.RemoveExtraHypen());
    }
    

    【讨论】:

    • 或者更好的是使用类似RemoveDuplicates(this string str, char duplicate)这样的扩展方法,所以它不仅仅适用于这个:P
    • @Earlz 非常好的改进! :D
    【解决方案2】:

    试试Regex

    using System.Text.RegularExpressions;
    
    string input = "foo-bar----baz--biz";
    
    Regex regex = new Regex("\\-+");
    
    string output = regex.Replace(input, "-");
    

    【讨论】:

    • 嗯..我认为使用正则表达式很容易,但不确定如何构建它..我想知道是否有一个相对简单的解决方案不使用正则表达式
    【解决方案3】:

    非常简单的解决方案:)

        private string RemoveDuplicates(string s, char toRemove)
        {
            if (s.Length <= 1) return s;
            char s1,s2;
            string result="";
            result = s[0].ToString();
            s1 = s[0];
            for (int i = 0; i < s.Length-1; i++) 
            {
    
                s2 = s[i + 1];
                if ( s2.Equals(toRemove)&& s1.Equals(s2))
                {
                    s1 = s[i]; 
                    continue;
                }
                result += s2.ToString();
                s1 = s[i + 1];
    
            }
            return result;
        }
    

    string s = RemoveDuplicates("f---oo-bar----baz--biz", '-');

    【讨论】:

    • 这不是我所说的“简单”!
    猜你喜欢
    • 2010-11-17
    • 2010-10-12
    • 2021-08-13
    • 2021-12-03
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 2013-09-18
    相关资源
    最近更新 更多