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
Nur Code-Golfing Rebecca Chernoff's Lösung :-)
alert(("This is a string.".match(/is/g) || []).length);
Hier ist die schnellste Funktion!
Warum ist sie schneller?
Alle Operationen sind so kombiniert wie möglich, um Verzögerungen aufgrund mehrerer Operationen zu vermeiden
String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};
Hier ist eine langsamere und besser lesbare Version:
String.prototype.timesCharExist = function ( chr ) {
var total = 0, last_location = 0, single_char = ( chr + '' )[0];
while( last_location = this.indexOf( single_char, last_location ) + 1 )
{
total = total + 1;
}
return total;
};
Diese ist langsamer wegen des Zählers, langen Variablennamen und der falschen Verwendung einer Variable.
Um sie zu verwenden, tun Sie einfach dies:
'Das Zeichen "a" kommt nur zweimal vor'.timesCharExist('a');
Bearbeitung: (16. Dezember 2013)
VERWENDE es nicht mit Opera 12.16 oder älter! Es dauert fast 2,5x länger als die Regex-Lösung!
In Chrome dauert diese Lösung zwischen 14ms und 20ms für 1.000.000 Zeichen.
Die Regex-Lösung benötigt 11-14ms für die gleiche Menge.
Die Verwendung einer Funktion (außerhalb von String.prototype
) dauert etwa 10-13ms.
Hier ist der verwendete Code:
String.prototype.timesCharExist=function(c){var t=0,l=0,c=(c+'')[0];while(l=this.indexOf(c,l)+1)++t;return t};
var x=Array(100001).join('1234567890');
console.time('proto');x.timesCharExist('1');console.timeEnd('proto');
console.time('regex');x.match(/1/g).length;console.timeEnd('regex');
var timesCharExist=function(x,c){var t=0,l=0,c=(c+'')[0];while(l=x.indexOf(c,l)+1)++t;return t;};
console.time('func');timesCharExist(x,'1');console.timeEnd('func');
Das Ergebnis aller Lösungen sollte 100.000 sein!
Hinweis: Wenn Sie möchten, dass diese Funktion mehr als 1 Zeichen zählt, ändern Sie c=(c+'')[0]
in c=c+''
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