Wie kann ich die Anzahl der Vorkommnisse eines bestimmten Strings in einem anderen String zählen? Zum Beispiel versuche ich dies in Javascript:
var temp = "Das ist ein String.";
alert(temp.count("ist")); //sollte '2' ergeben
Wie kann ich die Anzahl der Vorkommnisse eines bestimmten Strings in einem anderen String zählen? Zum Beispiel versuche ich dies in Javascript:
var temp = "Das ist ein String.";
alert(temp.count("ist")); //sollte '2' ergeben
Das g
in dem regulären Ausdruck (kurz für global) besagt, dass der gesamte String durchsucht werden soll, anstatt nur das erste Vorkommen zu finden. Dies passt zweimal zu is
:
var temp = "Das ist ein String.";
var count = (temp.match(/is/g) || []).length;
console.log(count);
Und wenn es keine Übereinstimmungen gibt, gibt es 0
zurück:
var temp = "Hallo Welt!";
var count = (temp.match(/is/g) || []).length;
console.log(count);
/** Funktion, die die Anzahl der Vorkommen eines Teilstrings in einem String zählt;
* @param {String} string Der String
* @param {String} subString Der Teilstring, nach dem gesucht werden soll
* @param {Boolean} [allowOverlapping] Optional. (Standard:false)
*
* @author Vitim.us https://gist.github.com/victornpb/7736865
* @see Unit Test https://jsfiddle.net/Victornpb/5axuh96u/
* @see https://stackoverflow.com/a/7924240/938822
*/
function occurrences(string, subString, allowOverlapping) {
string += "";
subString += "";
if (subString.length <= 0) return (string.length + 1);
var n = 0,
pos = 0,
step = allowOverlapping ? 1 : subString.length;
while (true) {
pos = string.indexOf(subString, pos);
if (pos >= 0) {
++n;
pos += step;
} else break;
}
return n;
}
occurrences("foofoofoo", "bar"); //0
occurrences("foofoofoo", "foo"); //3
occurrences("foofoofoo", "foofoo"); //1
occurrences("foofoofoo", "foofoo", true); //2
Übereinstimmungen:
foofoofoo
1 `----´
2 `----´
Ich habe einen Leistungstest durchgeführt und meine Funktion ist mehr als 10 Mal schneller als die Regexp-Match-Funktion von gumbo. In meinem Test hat der String eine Länge von 25 Zeichen, mit 2 Vorkommen des Zeichens 'o'. Ich habe den Test 1.000.000 Mal in Safari ausgeführt.
Safari 5.1
Benchmark> Gesamtzeit der Ausführung: 5617 ms (Regexp)
Benchmark> Gesamtzeit der Ausführung: 881 ms (meine Funktion 6,4x schneller)
Firefox 4
Benchmark> Gesamtzeit der Ausführung: 8547 ms (Regexp)
Benchmark> Gesamtzeit der Ausführung: 634 ms (meine Funktion 13,5x schneller)
Bearbeitung: Änderungen, die ich vorgenommen habe
Gecachte Länge des Teilstrings
Hinzufügen von Typumwandlungen in String.
Hinzufügen des optionalen Parameters 'allowOverlapping'
Korrekte Ausgabe für den Fall eines leeren Teilstrings "" hinzugefügt.
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.
23 Stimmen
Es kommt darauf an, ob Sie überlappende Instanzen akzeptieren, z.B. var t = "sss"; Wie viele Instanzen des Teilstrings "ss" befinden sich in dem obigen String? 1 oder 2? Springen Sie über jede Instanz hinweg oder bewegen Sie sich zeichenweise und suchen nach dem Teilstring?
4 Stimmen
Ein verbesserter Benchmark für die Antworten auf diese Frage: jsperf.com/string-ocurrence-split-vs-match/2 (basierend auf dem Benchmark von Kazzkiq).
0 Stimmen
Zählen Sie die Gesamtmenge eines bestimmten Wortes in einem String JavaScript stackoverflow.com/a/65036248/4752258
0 Stimmen
Dieses Video scheint hier vage verwandt zu sein - "Google Coding Interview With A Facebook Software Engineer" - youtube.com/watch?v=PIeiiceWe_w