首页 > 解决方案 > LINQ 从字符串中连续查找 3 次以上

问题描述

string x = "abcdeffffaaaasdfhfgjhfghzxxxx";

如果某个字母连续出现超过一定时间等,我如何从字符串中获取字符,如果任何字母连续出现超过 3 次,您将在集合中获得 4 个“a”元素。可以使用 LINQ 吗?

标签: linq

解决方案


我会选择 RegEx,但如果你真的想使用 LINQ,我会将你的字符序列分组为相同字符的组,并计算每组中的元素数。

TODO:判断 A a à à à ä 是同一个“字母”还是不同的“字母”。使用StringCompare.InvariantCultureIgnoreCase等来克服这个问题

var CharacterCounts = sourceString       // get your source string as sequence of char
    .GroupBy(letter => letter           // group them into groups with same letter
    .Select(group => new                // from every group count the number of elements
    {
        Char = group.Key,
        Count = group.Count(),
    }

要知道是否有任何字母出现超过某个数字:

bool someLettersOften = characterCounts
     .Where(characterCount => characterCount.Count > 3)
     .Any();

要获取所有经常出现的字母:

 var oftenUsedLetters = characterCounts
     .Where(characterCount => characterCount.Count > 3)
     .Select(characterCount => characterCount.Character);

推荐阅读