문자열에서 특정 문자 발생 횟수 계산
문자열에서 특정 문자의 발생 횟수를 계산하는 가장 간단한 방법은 무엇입니까?
즉, 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)
한번 시도해보세요!
또는 (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
감사합니다, @guffa . 한 줄로 또는 .NET의 더 긴 문 내에서 수행하는 기능은 매우 편리합니다. 이 VB.NET 예제는 LineFeed 문자 수를 계산합니다.
Dim j As Integer = MyString.Count(Function(c As Char) c = vbLf)
j는 MyString의 LineFeeds 수를 반환합니다.
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
이 솔루션을 찾았을 때 계산하려는 문자열이 한 문자보다 길기 때문에 약간 다른 것을 찾고 있었으므로 다음 솔루션을 찾았습니다.
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 CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
Return (New System.Text.RegularExpressions.Regex(ch)).Matches(value).Count
End Function
이것이 가장 쉬운 방법이라고 생각합니다.
Public Function CountCharacter(ByVal value As String, ByVal ch As Char) As Integer
Return len(value) - len(replace(value, ch, ""))
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")
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');
다음과 같이하는 것이 좋습니다.
String.Replace("e", "").Count
String.Replace("t", "").Count
.Split("e").Count - 1
또는 .Split("t").Count - 1
각각 을 사용할 수도 있지만 예를 들어 시작 부분에 e 또는 at이 있으면 잘못된 값을 제공합니다 String
.
나는 최고의 답을 찾았습니다 : P :
String.ToString.Count - String.ToString.Replace("e", "").Count
String.ToString.Count - String.ToString.Replace("t", "").Count
var charCount = "string with periods...".Count(x => '.' == x);
다음 기능을 사용합니다. 메모리 효율성이 가장 높지는 않지만 이해하기가 매우 간단하고 여러 비교 방법을 지원하며 4 줄 밖에되지 않으며 빠르며 대부분 VBA에서도 작동하며 개별 문자뿐만 아니라 모든 검색 문자열을 찾습니다 (나는 종종 VbCrLf를 검색합니다. (에스)).
빠진 유일한 것은 다른 "시작"에서 검색을 시작할 수있는 기능입니다.
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
또 다른 가능성은 Split으로 작업하는 것입니다.
Dim tmp() As String
tmp = Split(Expression, Delimiter)
Dim count As Integer = tmp.Length - 1
또 다른 가능성은 정규 표현식을 사용하는 것입니다.
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으로 변환하십시오.
사용하다:
Function fNbrStrInStr(strin As Variant, strToCount As String)
fNbrStrInStr = UBound(Split(strin, strToCount)) - LBound(Split(strin, strToCount))
End Function
strin
매우 긴 텍스트를 처리하기 위해 변형으로 사용 했습니다. 분할은 사용자 설정에 따라 0 기반 또는 1 기반이 될 수 있으며,이를 빼면 정확한 카운트가 보장됩니다.
strin
코드를 간결하게 유지하는 것보다 strcount가 더 길다는 테스트는 포함하지 않았습니다 .
너무 단순한 것에 대한 엄청난 코드 :
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.
' 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
사용하다:
Dim a
inputString = InputBox("Enter String", "Enter Value", "")
MyString = UCase(inputString)
MsgBox MyString
Dim stringLength
stringLength = Len(MyString)
Dim temp
output = ""
i = 1
Do
temp = Mid(MyString, i, 1)
MsgBox temp & i
CharacterCount = len(MyString) - len(Replace(MyString, temp, ""))
MyString = Replace(MyString, temp, "")
output = output & temp & ": " & CharacterCount & vbNewline
Loop While MyString <> ""
MsgBox output
Private Sub Data_KeyPress(sender As Object, e As KeyPressEventArgs) Handles Data.KeyPress
If Not IsNumeric(e.KeyChar) And Not e.KeyChar = ChrW(Keys.Back) And Not e.KeyChar = "." Then
e.Handled = True
Else
If e.KeyChar = "." And Data.Text.ToCharArray().Count(Function(c) c = ".") > 0 Then
e.Handled = True
End If
End If
End Sub
다음은 OP의 문제를 해결하는 직접 코드입니다.
Dim str As String = "the little red hen"
Dim total As Int32
Dim Target As String = "e"
Dim Temp As Int32
Dim Temp2 As Int32 = -1
Line50:
Temp = str.IndexOf(Target, Temp2 + 1)
Temp2 = Temp
If Temp <> -1 Then
' Means there is a target there
total = total + 1
GoTo Line50
End If
MessageBox.Show(CStr(total))
이제 이것은 OP의 문제를 해결하는 편리한 기능입니다.
Public Function CountOccurrence(ByVal YourStringToCountOccurrence As String, ByVal TargetSingleCharacterToCount As String) As Int32
Dim total As Int32
Dim Temp As Int32
Dim Temp2 As Int32 = -1
Line50:
Temp = YourStringToCountOccurrence.IndexOf(TargetSingleCharacterToCount, Temp2 + 1)
Temp2 = Temp
If Temp <> -1 Then
' Means there is a target there
total = total + 1
GoTo Line50
Else
Return total
End If
End Function
기능 사용 예 :
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Dim str As String = "the little red hen"
MessageBox.Show(CStr(CountOccurrence(str, "e")))
' It will return 4
End Sub
참고 URL : https://stackoverflow.com/questions/5193893/count-specific-character-occurrences-in-a-string
'IT Share you' 카테고리의 다른 글
Google Cloud Storage에서 많은 파일을 어떻게 공개합니까? (0) | 2020.12.02 |
---|---|
phpmyadmin을 사용하여 저장 프로 시저를 작성하는 방법과 PHP를 통해 사용하는 방법은 무엇입니까? (0) | 2020.12.02 |
웹 API POST 본문 객체는 항상 null입니다. (0) | 2020.12.02 |
C ++-십진수를 이진으로 변환 (0) | 2020.12.02 |
삽입시 Postgres 오류-오류 : "UTF8"인코딩에 대한 잘못된 바이트 시퀀스 : 0x00 (0) | 2020.12.01 |