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.

2voto

zoran404 Punkte 1312

Die schnellste Methode scheint die Verwendung des Indexoperators zu sein:

function charOccurances (str, char)
{
  for (var c = 0, i = 0, len = str.length; i < len; ++i)
  {
    if (str[i] == char)
    {
      ++c;
    }
  }
  return c;
}

console.log( charOccurances('example/path/script.js', '/') ); // 2

Oder als Prototyp-Funktion:

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

console.log( 'example/path/script.js'.charOccurances('/') ); // 2

1voto

Jonathan Fingland Punkte 54655

Im Folgenden wird ein regulärer Ausdruck verwendet, um die Länge zu prüfen. testex stellt sicher, dass Sie keine 16 oder mehr aufeinanderfolgende Nicht-Komma-Zeichen haben. Wird der Test bestanden, wird die Zeichenfolge geteilt. Das Zählen der Kommas ist so einfach wie das Zählen der Token minus eins.

var mainStr = "str1,str2,str3,str4";
var testregex = /([^,]{16,})/g;
if (testregex.test(mainStr)) {
  alert("values must be separated by commas and each may not exceed 15 characters");
} else {
  var strs = mainStr.split(',');
  alert("mainStr contains " + strs.length + " substrings separated by commas.");
  alert("mainStr contains " + (strs.length-1) + " commas.");
}

1voto

Naveen Kumar Punkte 31
var mainStr = "str1,str2,str3,str4";
var splitStr = mainStr.split(",").length - 1; // subtracting 1 is important!
alert(splitStr);

Durch die Aufteilung in ein Array erhalten wir eine Anzahl von Elementen, die immer um 1 größer ist als die Anzahl der Instanzen des Zeichens. Dies ist vielleicht nicht die speichereffizienteste Methode, aber wenn Ihre Eingabe immer klein sein wird, ist dies eine unkomplizierte und leicht verständliche Methode, dies zu tun.

Wenn Sie sehr große Zeichenketten analysieren müssen (mehr als ein paar hundert Zeichen) oder wenn dies in einer Kernschleife geschieht, die große Datenmengen verarbeitet, würde ich eine andere Strategie empfehlen.

1voto

Damion Dooley Punkte 11

Und die gibt es:

function character_count(string, char, ptr = 0, count = 0) {
    while (ptr = string.indexOf(char, ptr) + 1) {count ++}
    return count
}

Funktioniert auch mit ganzen Zahlen!

1voto

Gerard ONeill Punkte 3528

Hier ist eine, die genauso schnell ist wie die split() und die Ersetzen-Methoden, die ein klein wenig schneller sind als die Regex-Methode (sowohl in Chrome als auch in Firefox).

let num = 0;
let str = "str1,str2,str3,str4";
//Note: Pre-calculating `.length` is an optimization;
//otherwise, it recalculates it every loop iteration.
let len = str.length;
//Note: Don't use a `for (... of ...)` loop, it's slow!
for (let charIndex = 0; charIndex < len; ++charIndex) {
  if (str[charIndex] === ',') {
    ++num;
  }
}

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