Подсчет вхождений определенных символов в строку - PullRequest
59 голосов
/ 04 марта 2011

Какой самый простой способ подсчитать количество вхождений определенного символа в строку?

То есть мне нужно написать функцию countTheCharacters (), чтобы

str = "the little red hen"
count = countTheCharacters(str,"e") ' Count should equal 4
count = countTheCharacters(str,"t") ' Count should equal 3

Ответы [ 26 ]

2 голосов
/ 19 августа 2013

Использование регулярных выражений ...

Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
  Return (New System.Text.RegularExpressions.Regex(ch)).Matches(value).Count
End Function
2 голосов
/ 15 мая 2014

Я думаю, это будет проще всего:

Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
  Return len(value) - len(replace(value, ch, ""))
End Function
1 голос
/ 25 июня 2015
eCount = str.Length - Replace(str, "e", "").Length
tCount = str.Length - Replace(str, "t", "").Length
1 голос
/ 23 января 2014

Я использую LINQ, и решение очень простое:

Код в C #:

count = yourString.ToCharArray().Count(c => c == 'e');

код в функции:

public static int countTheCharacters(string str, char charToCount){
   return str.ToCharArray().Count(c => c == charToCount);
}

Вызовите функцию:

count = countTheCharacters(yourString, 'e');
1 голос
/ 04 марта 2011

Другая возможность заключается в работе с Split:

Dim tmp() As String
tmp = Split(Expression, Delimiter)
Dim count As Integer = tmp.Length - 1
1 голос
/ 06 января 2013

Я предлагаю вам сделать это следующим образом:

String.Replace("e", "").Count
String.Replace("t", "").Count

Вы также можете использовать .Split("e").Count - 1 или .Split("t").Count - 1 соответственно, но это дает неправильные значения, если у вас, например, есть e или at вначало String.

0 голосов
/ 12 февраля 2017

Я использую следующую функцию.Он не самый эффективный в использовании памяти, но его очень просто понять, он поддерживает несколько методов сравнения, всего 4 строки, быстрый, в основном работает и в VBA, найдет не только отдельные символы, но и любую строку поиска (я часто ищу VbCrLf(s)).

Единственное, чего не хватает, так это возможности начать поиск с другого «Пуска»

    Function inStC(myInput As String, Search As String, Optional myCompareMethod As Long = CompareMethod.Text) As Long
        If InStr(1, myInput, Search, myCompareMethod) = 0 Then Return 0
        Return UBound(Split(myInput, Search,, myCompareMethod))
    End Function

Мне нравится то, что он компактен в использовании.

str="the little red hen"
count=inStC(str,"e") 'count should equal 4
count=inStC(str,"t") 'count should equal 3

Пока я здесь, я хотел бы проиллюстрировать мою функцию inStB, которая вместо возврата количества строк просто возвращает логическое значение, если строка поиска присутствует.Мне часто нужна эта функция, и это делает мой код чище.

Function inStB(myInput As String, Search As String, Optional Start As Long = 1, Optional myCompareMethod As Long = CompareMethod.Text) As Boolean
    If InStr(Start, myInput, Search, myCompareMethod) > 0 Then Return True
    Return False
End Function
0 голосов
/ 04 марта 2011

Другая возможность - использовать регулярное выражение:

string a = "this is test";
string pattern = "t";
System.Text.RegularExpressions.Regex ex = new System.Text.RegularExpressions.Regex(pattern);
System.Text.RegularExpressions.MatchCollection m = ex.Matches(a);
MessageBox.Show(m.Count.ToString());

Пожалуйста, преобразуйте это в VB.NET.

0 голосов
/ 22 октября 2015

var charCount = "string with periods...".Count(x => '.' == x);

0 голосов
/ 02 сентября 2015

Какие огромные коды для чего-то такого простого:

В C # создайте метод расширения и используйте LINQ.

public static int CountOccurences(this string s, char c)
{
    return s.Count(t => t == c);
}

Использование:

int count = "toto is the best".CountOccurences('t');

Результат: 4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...