Ich habe eine Zeichenfolge (zum Beispiel: "Hello there. My name is John. I work very hard. Hello there!"
) und ich versuche, die Anzahl der Vorkommen der Zeichenfolge "hello there"
zu finden. Bisher ist dies der Code, den ich habe:
Leider scheint diese Codezeile die Zeichenfolge zu teilen, jedes Mal, wenn sie den ersten Buchstaben von phrase
sieht, in diesem Fall h
. Also anstelle des Ergebnisses Occurrences = 2
, auf das ich hoffen würde, bekomme ich tatsächlich eine viel größere Zahl. Ich weiß, dass das Zählen der Anzahl der Splits in einem String ein schrecklicher Weg ist, dies zu tun, selbst wenn ich die richtige Antwort bekommen würde, also könnte mir bitte jemand helfen und Hilfe leisten?
Sie können eine Do Until-Schleife erstellen, die anhält, sobald eine Integer-Variable der Länge der zu überprüfenden Zeichenfolge entspricht. Wenn der Ausdruck existiert, inkrementieren Sie Ihre Vorkommen und fügen Sie die Länge des Ausdrucks plus die Position, in der er gefunden wurde, zur Cursorvariablen hinzu. Wenn die Phrase nicht gefunden werden kann, sind Sie fertig mit der Suche (keine weiteren Ergebnisse), also legen Sie sie auf die Länge der Zielzeichenfolge fest. Um das gleiche Vorkommen nicht mehr als einmal zu zählen, prüfen Sie nur den Cursor auf die Länge der Zielzeichenfolge in der Schleife (strCheckThisString).
%Vor% Sie müssen nur die Eingabe der Split-Funktion in ein String-Array ändern und dann die StringSplitOptions
löschen.
Probieren Sie diese Codezeile aus:
%Vor% Ich habe das nicht überprüft, aber ich denke, Sie müssen auch der Tatsache Rechnung tragen, dass die Vorkommen aufgrund der Tatsache, dass Sie sich mit Ihrer Zeichenkette teilen und nicht wie oft zählen, zu hoch wären Es ist in der Zeichenfolge, also Ich denke Occurrences = Occurrences - 1
Hoffe, das hilft
Sie könnten eine rekursive Funktion mit IndexOf erstellen. Übergeben der zu durchsuchenden Zeichenfolge und der zu lokalisierenden Zeichenfolge, inkrementiert jede Rekursion einen Zähler und setzt den StartIndex auf +1 für den zuletzt gefundenen Index, bis die Suchzeichenfolge nicht mehr gefunden wird. Die Funktion benötigt optionale Parameter Startposition und Zähler, die als Referenz übergeben werden:
%Vor%Rufen Sie die Funktion auf, indem Sie string an die Suche übergeben und string, um die Position zu suchen und optional zu starten:
%Vor%Beachten Sie die Verwendung von .ToLower, mit der in Ihrem Vergleich die Groß- / Kleinschreibung ignoriert wird. Fügen Sie diese Anweisung nicht ein, wenn Sie möchten, dass der Vergleich fallspezifisch ist.
Der Ausgang gibt Ihnen die Nr. von Vorkommen einer Zeichenfolge in einer anderen.
Wenn ich auf Ihren ursprünglichen Versuch schaue, habe ich herausgefunden, dass dies den Trick machen sollte, wenn "Teilen" ein Array erstellt. Occurrences = input.split (Ausdruck) .ubound
Das ist CaSe-sensitiv, also sollte in Ihrem Fall die Phrase "Hallo da" lauten, da es in der Eingabe kein "hallo da" gibt
Eine weitere Lösung basiert auf InStr(i, str, substr)
function (Suche nach substr
in str
ab i
position, Weitere Informationen über InStr () ):
Sobald keine Teilzeichenfolge gefunden wird ( InStr
gibt 0
zurück, anstelle der gefundenen Teilzeichenfolgeposition in der Basiszeichenfolge), wird die Suche beendet und die Anzahl der Vorkommen wird zurückgegeben.
Ich weiß nicht, ob das offensichtlicher ist?
Ausgehend vom Anfang von longString
überprüfen Sie die nächsten Zeichen bis zu den Zeichen in phrase
, wenn phrase
nicht gefunden wird, beginnen Sie mit dem zweiten Zeichen usw. Wenn es gefunden wird, beginnen Sie an der aktuellen Position plus der Zahl von Zeichen in phrase
und erhöht den Wert von occurences