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

时间:2010-10-19 18:23:47

标签: c#

我只是想知道是否有一种简单的方法可以做到这一点。即用相同的字符替换连续字符的出现次数。

例如: - 如果我的字符串是“likeeeee tttthhiiissss”,那么我的最终输出应该是“像这样的东西”。

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

你们可以提出一些简单的方法吗?

5 个答案:

答案 0 :(得分:12)

这应该这样做:

var regex = new Regex("(.)\\1+");
var str = "something likeeeee!! tttthhiiissss";

Console.WriteLine(regex.Replace(str, "$1")); // something like! this

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

答案 1 :(得分:4)

string myString = "something likeeeee tttthhiiissss";

char prevChar = '';
StringBuilder sb = new StringBuilder();
foreach (char chr in myString)
{
    if (chr != prevChar) {
        sb.Append(chr);
        prevChar = chr;
    }
}

答案 2 :(得分:1)

怎么样:

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. 不同的字符
  4. 从匿名类型x.x中选择字符x
  5. 转换回char []数组,以便我们可以传递给string
  6. 的构造函数

答案 3 :(得分:0)

        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. 将读取从用户
  2. 输入的字符串

    2.使用 string.ToChar()

    转换char数组中的字符串
    1. 循环将针对字符串

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

    4. 修剪存储在该特定数组中的字符。
    5. 对于最后一个字符,循环将显示索引出错的错误,因为它将是数组的最后一个位置值。这就是我使用* if((i!=(str.Length - 1)))*

    6. 的原因

      6.修剪后留下的字符以串联形式存储。

答案 4 :(得分:-2)

word =“喜欢的人tttthhiiisssss” re.sub(r“(。)\ 1+”,r“ \ 1”,word)