代码之家  ›  专栏  ›  技术社区  ›  Sachin Shanbhag

用相同的单个字符替换连续字符

c#
  •  8
  • Sachin Shanbhag  · 技术社区  · 14 年前

    我只是想知道是否有一个简单的方法来做这件事。i、 用同一个字符替换连续字符的出现。

    如果我的字符串是“像eeeee tthhiisss这样的东西”,那么我的最终输出应该是“像这样的东西”。

    字符串可以包含特殊字符,也可以包含空格。

    你们能推荐一些简单的方法吗。

    4 回复  |  直到 14 年前
        1
  •  14
  •   alexn    14 年前

    这应该做到:

    var regex = new Regex("(.)\\1+");
    var str = "something likeeeee!! tttthhiiissss";
    
    Console.WriteLine(regex.Replace(str, "$1")); // something like! this
    

    正则表达式将匹配任何字符 (.) \\1+ 将匹配第一组中捕获的任何内容。

        2
  •  4
  •   Gabriel McAdams    14 年前
    string myString = "something likeeeee tttthhiiissss";
    
    char prevChar = '';
    StringBuilder sb = new StringBuilder();
    foreach (char chr in myString)
    {
        if (chr != prevChar) {
            sb.Append(chr);
            prevChar = chr;
        }
    }
    
        3
  •  2
  •   Kirk Woll    14 年前

    怎么样:

    s = new string(s
         .Select((x, i) => new { x, i })
         .Where(x => x.i == s.Length - 1 || s[x.i + 1] != x.x)
         .Select(x => x.x)
         .ToArray());
    

    在英语中,我们正在基于char[]数组创建一个新字符串。我们通过应用几个LINQ运算符来构造char[]数组:

    1. Select i 以及当前角色 x
    2. 筛选出与后续字符不同的字符
    3. x.x 退出匿名类型 .
    4. string .
        4
  •  0
  •   Hibbah Nadeem    7 年前
            Console.WriteLine("Enter any string");
            string str1, result="", str = Console.ReadLine();
            char [] array= str.ToCharArray();
            int i=0;
            for (i = 0; i < str.Length;i++ )
            {
              if ((i != (str.Length - 1)))
              { if (array[i] == array[i + 1]) 
                {
                    str1 = str.Trim(array[i]);
                }
                else
                {
                    result += array[i];
                }
              }
              else
              {
              result += array[i];
              }                    
            }
            Console.WriteLine(result);
    

    在这个代码中,程序;

    1. 将读取从用户输入的字符串

    字符串.ToChar()

    1. 循环将为字符串中的每个字符运行

    2. 将数组中存储在该特定位置的每个字符与存储在比该位置大一个位置的字符进行比较。如果找到相同的字符,则存储在该特定数组中的字符将使用 .ToTrim()

    3. 对于最后一个字符,循环将显示索引越界错误,因为它将是数组的最后一个位置值。所以我才用了if((I!=(str.Length-1)))*