计算在出现任何其他字符之前某个字符串出现在字符串中的次数

时间:2011-03-17 14:39:57

标签: c#

我有很多字符串。每个字符串前面至少有一个$。循环遍历每个字符串的字符以计​​算每个字符串有多少$的最佳方法。

例如:

"$hello" - 1
"$$hello" - 2
"$$h$ello" - 2

12 个答案:

答案 0 :(得分:71)

您可以使用Count方法

var count = mystring.Count(x => x == '$')

答案 1 :(得分:33)

int count = myString.TakeWhile(c => c == '$').Count();

没有LINQ

int count = 0;
while(count < myString.Length && myString[count] == '$') count++;

答案 2 :(得分:14)

最简单的方法是使用LINQ:

var count = text.TakeWhile(c => c == '$').Count();

当然有更有效的方法,但这可能是最简单的方法。

答案 3 :(得分:9)

你可以这样做,它不需要LINQ,但它不是最好的方法(因为你将整个字符串拆分并放在一个数组中,只需选择它的长度,你可以更好的只是做while循环并检查每个字符),但它有效。

int count = test.Split('$').Length - 1;

答案 4 :(得分:6)

int count = yourText.Length - yourText.TrimStart('$').Length;

答案 5 :(得分:6)

var str ="hello";
str.Where(c => c == 'l').Count()  // 2

答案 6 :(得分:5)

int count = Regex.Matches(myString,"$").Count;

答案 7 :(得分:2)

public static int GetHowManyTimeOccurenceCharInString(string text, char c)
{
    int count = 0;
    foreach(char ch in text)
    {
        if(ch.Equals(c))
        {
            count++;
        }

    }
    return count;
}

答案 8 :(得分:0)

这是一个类似的解决方案,用于查找字符串中包含的电子邮件地址数。这种方式效率更高。

int count = 0;
foreach (char c in email.Trim())
    if (c == '@') count++;

答案 9 :(得分:0)

您可以采取以下方法:

// Counts how many of a certain character occurs in the given string
public static int CharCountInString(char chr, string str)
{
    return str.Split(chr).Length-1;
}

根据参数,此方法返回特定字符串中特定字符的计数。

此方法的工作原理是通过指定的字符将字符串拆分为数组,然后返回该数组的长度-1。

答案 10 :(得分:0)

//此代码对我有用

class CountOfLettersOfString
{
    static void Main()
    {

        Console.WriteLine("Enter string to check count of letters");
        string name = Console.ReadLine();

        //Method1
        char[] testedalphabets = new char[26];
        int[] letterCount = new int[26];
        int countTestesd = 0;
        Console.WriteLine($"Given String is:{name}");

        for (int i = 0; i < name.Length - 1; i++)
        {
            int countChar = 1;

            bool isCharTested = false;

            for (int j = 0; j < testedalphabets.Length - 1; j++)
            {
                if (name[i] == testedalphabets[j])
                {
                    isCharTested = true;
                    break;
                }
            }

            if (!isCharTested)
            {
                testedalphabets[countTestesd] = name[i];

                for (int k = i + 1; k < name.Length - 1; k++)
                {
                    if (name[i] == name[k])
                    {
                        countChar++;
                    }
                }
                letterCount[countTestesd] = countChar;
                countTestesd++;

            }
            else
            {
                continue;
            }
        }

        for (int i = 0; i < testedalphabets.Length - 1; i++)
        {
            if (!char.IsLetter(testedalphabets[i]))
            {
                continue;
            }
            Console.WriteLine($"{testedalphabets[i]}-{letterCount[i]}");
        }


        //Method2
        var g = from c in name.ToLower().ToCharArray() // make sure that L and l are the same eg
                group c by c into m
                select new { Key = m.Key, Count = m.Count() };

        foreach (var item in g)
        {
            Console.WriteLine(string.Format("Character:{0} Appears {1} times", item.Key.ToString(), item.Count));
        }

        Console.ReadLine();
    }
}

答案 11 :(得分:-1)

只是一个简单的答案:

    public static int CountChars(string myString, char myChar)
    {
        int count = 0;
        for (int i = 0; i < myString.Length; i++)
        {
            if (myString[i] == myChar) ++count;
        }
        return count;
    }

干杯! - 里克