Wie finde ich die Anzahl der Vorkommen eines Teilstrings innerhalb eines Strings vb.net

8

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:

%Vor%

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?

    
Matt 11.01.2013, 20:57
quelle

11 Antworten

2

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%     
N0Alias 11.01.2013, 21:54
quelle
12

Der beste Weg, es zu tun, ist dies:

%Vor%     
Gaucho 23.03.2014 16:04
quelle
10

Noch eine Idee:

%Vor%

Sie müssen nur sicherstellen, dass phrase.Length > 0 .

    
Neolisk 11.01.2013 22:59
quelle
2

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

    
John Bustos 11.01.2013 21:14
quelle
2

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.

    
Jon Wilmer 20.02.2014 11:27
quelle
2
%Vor%

Der Ausgang gibt Ihnen die Nr. von Vorkommen einer Zeichenfolge in einer anderen.

    
Sumit Kumar 18.10.2015 11:08
quelle
1

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

    
NeilR 13.07.2015 00:43
quelle
1

Eine weitere Lösung basiert auf InStr(i, str, substr) function (Suche nach substr in str ab i position, Weitere Informationen über InStr () ):

%Vor%

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.

    
Ivan Gerasimenko 24.08.2016 09:00
quelle
0

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

%Vor%     
SubtleStu 11.01.2013 23:26
quelle
0

Ich habe das in Vbscript verwendet, Sie können dasselbe auch in VB.net konvertieren

%Vor%     
Maddy 18.07.2015 12:22
quelle
0

Ich weiß, dass dieser Thread wirklich alt ist, aber ich habe auch eine andere Lösung:

%Vor%     
Codename 08.10.2015 14:58
quelle

Tags und Links