794 Stimmen

Zählt die Anzahl der Vorkommen eines Zeichens in einer Zeichenkette in Javascript

Ich muss die Anzahl der Vorkommen eines Zeichens in einer Zeichenkette zählen.

Nehmen wir zum Beispiel an, meine Zeichenkette enthält:

var mainStr = "str1,str2,str3,str4";

Ich möchte die Anzahl der Kommas ermitteln , Zeichen, also 3, und die Anzahl der einzelnen Zeichenfolgen nach der Trennung durch Komma, also 4.

Außerdem muss ich überprüfen, dass jede der Zeichenketten, d. h. str1 oder str2 oder str3 oder str4, nicht mehr als, sagen wir, 15 Zeichen umfassen sollte.

1090voto

Bjorn Punkte 64323

Ich habe diese Antwort aktualisiert. Mir gefällt die Idee, ein Spiel zu verwenden, besser, aber es ist langsamer:

console.log(("str1,str2,str3,str4".match(/,/g) || []).length); //logs 3

console.log(("str1,str2,str3,str4".match(new RegExp("str", "g")) || []).length); //logs 4

Verwenden Sie einen regulären Ausdruck, wenn Sie vorher wissen, wonach Sie suchen, andernfalls können Sie die RegExp Konstruktor, und übergeben Sie die g Flagge als Argument.

match gibt zurück. null ohne Ergebnis, so dass die || []

Die ursprüngliche Antwort aus dem Jahr 2009 finden Sie unten. Es wird unnötigerweise ein Array erstellt, aber die Verwendung eines Splits ist schneller (Stand: September 2014). Ich bin zwiegespalten. Wenn ich die Geschwindigkeit wirklich bräuchte, würde ich ohne Frage einen Split verwenden, aber ich würde es vorziehen, Match zu verwenden.

Alte Antwort (von 2009):

Wenn Sie nach den Kommas suchen:

(mainStr.split(",").length - 1) //3

Wenn Sie auf der Suche nach dem str

(mainStr.split("str").length - 1) //4

Sowohl in der Antwort von @Lo als auch in meiner eigenen dummen Leistungsprüfung split ist schneller, zumindest in Chrome, aber auch hier scheint die Erstellung eines zusätzlichen Arrays nicht sinnvoll zu sein.

297voto

Lorenz Lo Sauer Punkte 22044

Es gibt mindestens fünf Möglichkeiten. Die beste Option, die auch die schnellste sein sollte (dank der nativen RegEx-Engine), steht an erster Stelle.

Methode 1

("this is foo bar".match(/o/g)||[]).length;
// returns 2

Methode 2

"this is foo bar".split("o").length - 1;
// returns 2

Split wird nicht empfohlen, da es ressourcenhungrig ist. Für jede Übereinstimmung werden neue Instanzen von "Array" zugewiesen. Versuchen Sie es nicht für eine >100MB große Datei über FileReader. Sie können die genaue Ressourcennutzung beobachten, indem Sie Der Profiler von Chrome Option.

Methode 3

    var stringsearch = "o"
       ,str = "this is foo bar";
    for(var count=-1,index=-2; index != -1; count++,index=str.indexOf(stringsearch,index+1) );
// returns 2

Methode 4

Suche nach einem einzelnen Zeichen

    var stringsearch = "o"
       ,str = "this is foo bar";
    for(var i=count=0; i<str.length; count+=+(stringsearch===str[i++]));
     // returns 2

Methode 5

Elementzuordnung und Filterung. Dies wird nicht empfohlen, da die Ressourcen insgesamt im Voraus zugewiesen werden, anstatt Python-"Generatoren" zu verwenden:

    var str = "this is foo bar"
    str.split('').map( function(e,i){ if(e === 'o') return i;} )
                 .filter(Boolean)
    //>[9, 10]
    [9, 10].length
    // returns 2

Teilen: Ich habe das gemacht . mit derzeit 8 Methoden der Zeichenzählung, so dass wir unsere Ideen direkt bündeln und austauschen können - nur so zum Spaß, und vielleicht ein paar interessante Benchmarks :)

29voto

Fügen Sie diese Funktion dem Prototyp von sting hinzu:

String.prototype.count=function(c) { 
  var result = 0, i = 0;
  for(i;i<this.length;i++)if(this[i]==c)result++;
  return result;
};

Verwendung:

console.log("strings".count("s")); //2

28voto

Verwenden Sie einfach die geteilt um die Anzahl der Vorkommen eines Zeichens in einer Zeichenkette zu ermitteln.

mainStr.split(',').length // ergibt 4, d. h. die Anzahl der Zeichenketten nach der Aufteilung durch das Trennzeichen Komma

mainStr.split(',').length - 1 // ergibt 3, das ist die Anzahl der Kommas

14voto

user253751 Punkte 49246

Eine schnelle Google Die Suche ergab folgendes (von http://www.codecodex.com/wiki/index.php?title=Count_the_number_of_occurrences_of_a_specific_character_in_a_string#JavaScript )

String.prototype.count=function(s1) { 
    return (this.length - this.replace(new RegExp(s1,"g"), '').length) / s1.length;
}

Verwenden Sie es so:

test = 'one,two,three,four'
commas = test.count(',') // returns 3

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