1064 Stimmen

Wie würden Sie das Vorkommen einer Zeichenkette (eigentlich eines Zeichens) innerhalb einer Zeichenkette zählen?

Ich mache gerade etwas, bei dem ich merke, dass ich zählen möchte, wie viele / s, die ich in einer Zeichenkette finden konnte, und dann fiel mir auf, dass es mehrere Möglichkeiten gab, aber ich konnte mich nicht entscheiden, welche die beste (oder einfachste) war.

Im Moment denke ich an so etwas wie:

string source = "/once/upon/a/time/";
int count = source.Length - source.Replace("/", "").Length;

Aber es gefällt mir überhaupt nicht, hat jemand Lust?

Ich möchte nicht wirklich etwas ausgraben. RegEx oder doch?

Ich weiß, dass meine Zeichenfolge den gesuchten Begriff enthalten wird, also können Sie davon ausgehen, dass...

Natürlich auch für Streicher wobei Länge > 1 ,

string haystack = "/once/upon/a/time";
string needle = "/";
int needleCount = ( haystack.Length - haystack.Replace(needle,"").Length ) / needle.Length;

0voto

Sam Saarian Punkte 856

Für den Fall eines Zeichenkettenbegrenzers (nicht für den Fall eines Zeichens, wie im Betreff angegeben):
string source = "@@@einmal@@@auf@@@ein@@Zeit@@@";
int count = source.Split(new[] { "@@@" }, StringSplitOptions.RemoveEmptyEntries).Length - 1;

Die ursprüngliche Quelle des Posters ("/once/upon/a/time/") natürliche Begrenzer ist ein Zeichen '/' und Antworten erklären source.Split(char[]) Option obwohl...

0voto

Dave Cousineau Punkte 10963

Suche nach char zählt, ist etwas ganz anderes als die Suche nach string zählt. Es hängt auch davon ab, ob Sie mehr als eine Prüfung durchführen wollen oder nicht. Wenn Sie eine Vielzahl von verschiedenen char zählt, kann so etwas funktionieren:

var charCounts =
   haystack
   .GroupBy(c => c)
   .ToDictionary(g => g.Key, g => g.Count());

var needleCount = charCounts.ContainsKey(needle) ? charCounts[needle] : 0;

Anmerkung 1: Die Gruppierung in einem Wörterbuch ist so nützlich, dass es sehr sinnvoll ist, eine GroupToDictionary Erweiterungsmethode für sie.

Hinweis 2: Es kann auch nützlich sein, eine eigene Implementierung eines Wörterbuchs zu haben, die Standardwerte zulässt, und dann könnten Sie 0 für nicht existierende Schlüssel automatisch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X