Sandy D.: Bestimmtes Zeichen im String zählen

Hallo,

ich habe einen String, mit einem beliebig langen Text.
Jetzt möchte ich herausfinden wie oft ein bestimmtes Zeichen in diesem String vorkommt, aber irgendwie schaffe ich es nicht.

Probiert habe ich es mit:

a = "- Text Text Text Text Text Text Text <br />- Text Text Text Text Text"  
b = a.match(/\-/g).length

Antwort war 2, also das Zeichen "-" kommt 2x vor.

Aber wenn das Zeichen garnicht vorkommt, bekomme ich ne Fehlermeldung "a.match(/\-/g).length is null"

Gibts da ne bessere Lösung?
Danke für Gedankenstöße oder gar Beispiele.

  1. Mahlzeit Sandy D.,

    Aber wenn das Zeichen garnicht vorkommt, bekomme ich ne Fehlermeldung "a.match(/\-/g).length is null"

    Dann wird offenbar kein Array zurückgegeben, wenn das gesuchte Zeichen nicht vorkommt. Hast Du Dir mal angeschaut, was Du zurückbekommst (Stichwort "typeof")?

    Gibts da ne bessere Lösung?

    Den Ausnahmefall abfangen und in dem Fall die Variable "b" manuell auf 0 setzen.

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
    1. Dann wird offenbar kein Array zurückgegeben, wenn das gesuchte Zeichen nicht vorkommt. Hast Du Dir mal angeschaut, was Du zurückbekommst (Stichwort "typeof")?

      Es ist ein String, standardmäßig mit einem Zeichensatz gefüllt, und wird bei bedarf erweitert (Fehlermeldungen), die ich dann auflisten will (das klappt!) aber leider muss die Höhe des Layers je nach Anzahl der Meldungen mal größer, mal kleiner sein, daher benötige ich diese Anzhahl

      Inzwischen habe ich es so gelöst:

      var msgCounter = MSG.split("-");  
      alert(msgCounter.length-1);
      
      1. Mahlzeit Sandy D.,

        Dann wird offenbar kein Array zurückgegeben, wenn das gesuchte Zeichen nicht vorkommt. Hast Du Dir mal angeschaut, was Du zurückbekommst (Stichwort "typeof")?
        Es ist ein String, standardmäßig mit einem Zeichensatz gefüllt, und wird bei bedarf erweitert (Fehlermeldungen), die ich dann auflisten will (das klappt!) aber leider muss die Höhe des Layers je nach Anzahl der Meldungen mal größer, mal kleiner sein, daher benötige ich diese Anzhahl

        Du hast mich nicht verstanden.

        Du hast folgenden Programmcode gepostet:

        b = a.match(/\-/g).length;

        Du gehst dabei offenbar stillschweigend davon aus, dass Du IMMER ein Array zurückgeliefert bekommst. Hast Du Dir mal angeschaut, was der tatsächliche Rückgabewert der Methode http://de.selfhtml.org/javascript/objekte/string.htm#match@title=match() ist?

        MfG,
        EKKi

        --
        sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
      2. Hallo Sandy

        … aber leider muss die Höhe des Layers je nach Anzahl der Meldungen mal größer, mal kleiner sein, daher benötige ich diese Anzhahl

        Nur dafür benötigst du die Anzahl?
        Wenn du _keine_ Höhe für den Layer (was meinst du mit Layer) angibst, dann sollte er ganz von selbst genau die notwendige Höhe haben.

        Auf Wiederlesen
        Detlef

        --
        - Wissen ist gut
        - Können ist besser
        - aber das Beste und Interessanteste ist der Weg dahin!
      3. @@Sandy D.:

        nuqneH

        Inzwischen habe ich es so gelöst:

        var msgCounter = MSG.split("-");

        alert(msgCounter.length-1);

          
        Dein zweiter wäre mein erster Dedanke gewesen. Sicher performanter als mit regulärem Ausdruck. S.a. [Zitat 1418](http://community.de.selfhtml.org/zitatesammlung/zitat1418)  
          
        Noch performanter dürfte der Code sein, wenn man schnell selbst eine Zählschleife schreibt:  
          
        ~~~javascript
        for (var position = 0, counter = 0; position < MSG.lenght; position++)  
        {  
          if (MSG.[ref:self812;javascript/objekte/string.htm#char_at@title=charAt](position) == "-") counter++;  
        }
        

        Qapla'

        --
        Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)
        1. @@Gunnar Bittersmann:

          nuqneH

          Dedanke

          Ich wusste, eine Taste neben dem [F] ist die richtige. Ich wusste nur nicht, welche.

          Und bevor jemand sagt, mein Code würde nicht funzen[tm]: ja, auch dort habe ich einen Tippfehler eingebaut. C&P-Sperre. ;-)

          Qapla'

          --
          Alle Menschen sind klug. Die einen vorher, die anderen nachher. (John Steinbeck)