847 Stimmen

Wie zählt man das Vorkommen eines Strings in einem String?

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

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

1389voto

Rebecca Chernoff Punkte 21085

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);

279voto

Vitim.us Punkte 18320
/** 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;
}

Verwendung

occurrences("foofoofoo", "bar"); //0

occurrences("foofoofoo", "foo"); //3

occurrences("foofoofoo", "foofoo"); //1

allowOverlapping

occurrences("foofoofoo", "foofoo", true); //2

Übereinstimmungen:

  foofoofoo
1 `----´
2    `----´

Unit Test

Leistungstest

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.

Gist

218voto

Brandon Frohbieter Punkte 16807
Funktion countInstances(string, Wort) {
   return string.split(Wort).length - 1;
}
console.log(countInstances("Das ist ein String", "ist"))

115voto

Freezy Ize Punkte 1121

Sie können dies versuchen:

var theString = "Das ist ein String.";
console.log(theString.split("is").length - 1);

43voto

Gere Punkte 1994

Meine Lösung:

var temp = "Das ist ein String.";

function countOccurrences(str, value) {
  var regExp = new RegExp(value, "gi");
  return (str.match(regExp) || []).length;
}

console.log(countOccurrences(temp, 'ist'));

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