文字列内の特定の文字の出現回数をカウントする最も簡単な方法は何ですか?
つまり、関数countTheCharacters()を書く必要があるので、
str = "the little red hen"
count = countTheCharacters(str,"e") ' Count should equal 4
count = countTheCharacters(str,"t") ' Count should equal 3
最も簡単なのは、単純に文字列内の文字をループすることです。
Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
Dim cnt As Integer = 0
For Each c As Char In value
If c = ch Then
cnt += 1
End If
Next
Return cnt
End Function
使用法:
count = CountCharacter(str, "e"C)
ほぼ同じくらい効果的で短いコードを提供する別のアプローチは、LINQ拡張メソッドを使用することです。
Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
Return value.Count(Function(c As Char) c = ch)
End Function
これは簡単な方法です:
text = "the little red hen"
count = text.Split("e").Length -1 ' Equals 4
count = text.Split("t").Length -1 ' Equals 3
これを試すことができます
Dim occurCount As Integer = Len(testStr) - Len(testStr.Replace(testCharStr, ""))
これは簡単なバージョンです。
text.count(function(x) x = "a")
上記は、文字列内のaの数を示します。大文字小文字を無視したい場合:
text.count(function(x) Ucase(x) = "A")
または、文字を数えたいだけの場合:
text.count(function(x) Char.IsLetter(x) = True)
試してみます!
ありがとう、 @ guffa 。 1行で、または.NETの長いステートメント内でそれを行う機能は非常に便利です。このVB.NETの例は、LineFeed文字の数をカウントします。
Dim j As Integer = MyString.Count(Function(c As Char) c = vbLf)
jは、MyStringのLineFeedsの数を返します。
または(VB.NETの場合):
Function InstanceCount(ByVal StringToSearch As String,
ByVal StringToFind As String) As Long
If Len(StringToFind) Then
InstanceCount = UBound(Split(StringToSearch, StringToFind))
End If
End Function
次のようにUjjwal ManandharのコードをVB.NETに変換しています...
Dim a As String = "this is test"
Dim pattern As String = "t"
Dim ex As New System.Text.RegularExpressions.Regex(pattern)
Dim m As System.Text.RegularExpressions.MatchCollection
m = ex.Matches(a)
MsgBox(m.Count.ToString())
Public Class VOWELS
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim str1, s, c As String
Dim i, l As Integer
str1 = TextBox1.Text
l = Len(str1)
c = 0
i = 0
Dim intloopIndex As Integer
For intloopIndex = 1 To l
s = Mid(str1, intloopIndex, 1)
If (s = "A" Or s = "a" Or s = "E" Or s = "e" Or s = "I" Or s = "i" Or s = "O" Or s = "o" Or s = "U" Or s = "u") Then
c = c + 1
End If
Next
MsgBox("No of Vowels: " + c.ToString)
End Sub
End Class
この解決策を見つけたとき、数えたい文字列が1文字よりも長いため、少し違うものを探していたので、この解決策を思いつきました。
Public Shared Function StrCounter(str As String, CountStr As String) As Integer
Dim Ctr As Integer = 0
Dim Ptr As Integer = 1
While InStr(Ptr, str, CountStr) > 0
Ptr = InStr(Ptr, str, CountStr) + Len(CountStr)
Ctr += 1
End While
Return Ctr
End Function
Public Function CountOccurrences(ByVal StToSerach As String, ByVal StToLookFor As String) As Int32
Dim iPos = -1
Dim iFound = 0
Do
iPos = StToSerach.IndexOf(StToLookFor, iPos + 1)
If iPos <> -1 Then
iFound += 1
End If<br/>
Loop Until iPos = -1
Return iFound
End Function
コードの使用:
Dim iCountTimes As Integer = CountOccurrences("Can I call you now?", "a")
また、拡張機能として使用することもできます。
<Extension()> _
Public Function CountOccurrences(ByVal StToSerach As String, ByVal StToLookFor As String) As Int32
Dim iPos = -1
Dim iFound = 0
Do
iPos = StToSerach.IndexOf(StToLookFor, iPos + 1)
If iPos <> -1 Then
iFound += 1
End If
Loop Until iPos = -1
Return iFound
End Function
コードの使用:
Dim iCountTimes2 As Integer = "Can I call you now?".CountOccurrences("a")
これが最も簡単だと思います:
Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
Return len(value) - len(replace(value, ch, ""))
End Function
正規表現の使用...
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
次のようにすることをお勧めします。
String.Replace("e", "").Count
String.Replace("t", "").Count
.Split("e").Count - 1
または.Split("t").Count - 1
をそれぞれ使用することもできますが、たとえばString
の先頭にeまたはtがある場合、間違った値が返されます。
eCount = str.Length - Replace(str, "e", "").Length
tCount = str.Length - Replace(str, "t", "").Length
私は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');
別の可能性は、Splitを使用することです。
Dim tmp() As String
tmp = Split(Expression, Delimiter)
Dim count As Integer = tmp.Length - 1
' Trying to find the amount of "." in the text
' if txtName looks like "hi...hi" then intdots will = 3
Dim test As String = txtName.Text
Dim intdots As Integer = 0
For i = 1 To test.Length
Dim inta As Integer = 0 + 1
Dim stra As String = test.Substring(inta)
If stra = "." Then
intdots = intdots + 1
End If
Next
txttest.text = intdots
私は最高の答えを見つけました:P:
String.ToString.Count - String.ToString.Replace("e", "").Count
String.ToString.Count - String.ToString.Replace("t", "").Count
つかいます:
Function fNbrStrInStr(strin As Variant, strToCount As String)
fNbrStrInStr = UBound(Split(strin, strToCount)) - LBound(Split(strin, strToCount))
End Function
非常に長いテキストを処理するためのバリアントとしてstrin
を使用しました。スプリットは、ユーザー設定に応じてゼロベースまたはローエンド用の1ベースにすることができ、それを減算すると正しいカウントが保証されます。
コードを簡潔にするために、strin
より長いstrcountのテストは含めませんでした。
私は次の機能を使用します。それは最もメモリ効率がよくありませんが、理解するのは非常に簡単で、複数の比較方法をサポートし、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
私が好きなことの1つは、例を使用するのがコンパクトであることです。
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
別の可能性は、正規表現を使用することです:
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に変換してください。
とてもシンプルなものの巨大なコード:
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。
var charCount = "string with periods...".Count(x => '.' == x);