IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

Nombre de caractères


Sujet :

JavaScript

  1. #1
    Membre habitué
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2002
    Messages
    329
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Vosges (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Avril 2002
    Messages : 329
    Points : 139
    Points
    139
    Par défaut Nombre de caractères
    Bonjour,

    Existe-t-il une fonction permettant d'avoir le nombre de fois qu'un caractère bien identifié est présent dans une phrase?

    Par exemple, dans la phrase : La vie est un fleuve tranquille

    Il y a 4 fois la lettre L

    Merci

  2. #2
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Points : 142
    Points
    142
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function getNumChars(str, char) {
       return str.match(new RegExp(char,'ig')).length;
    }

  3. #3
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    oui ou un poil moins gourmands:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function getNumChars(str, char) {
       return str.split(char).length -1 ;
    }

  4. #4
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    oui ou un poil moins gourmands:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function getNumChars(str, char) {
       return str.split(char).length -1 ;
    }
    tu ne gère pas la casse
    donc si je mets un A majuscule et que dans mon texte je n'ai que des "a", ta fonction me retournera 0

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    split accepte une expression régulière en argument, donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    function getNumChars(str, char) {
       return str.split(char).length -1 ;
    }
    alert(getNumChars('Toto', /t/i))
    affiche bien 2

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    c'était pas spécifié mais ça se règle rapidement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return str.toLowerCase().split(char.toLowerCase()).length -1 ;}

  7. #7
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    c'était pas spécifié mais ça se règle rapidement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return str.toLowerCase().split(char.toLowerCase()).length -1 ;}
    exactement

    pendant ce temps, j'ai profité pour faire des tests avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    function getNumCharsMatchRegExp(str, chr)
    			{
    			 	return str.match(new RegExp(chr,'ig')).length;
    			}
     
    			function getNumCharsMatchLowerCase(str, chr)
    			{
    			 	return str.toLowerCase().match(new RegExp(chr.toLowerCase(),'g')).length;
    			}
     
    			function getNumCharsSplitRegExp(str, chr)
    			{
    			   return str.split(new RegExp(chr,'ig')).length - 1;
    			}
     
    			function getNumCharsSplitLowerCase(str, chr)
    			{
    			   return str.toLowerCase().split(chr.toLowerCase()).length - 1;
    			}
     
    			window.onload = function() {
    				console.time('createarray');
    				var str = new Array(1000000).join('i');
    				console.timeEnd('createarray');				
     
    				console.time('getNumCharsMatchRegExp');
    				console.log(getNumCharsMatchRegExp(str, 'i'));
    				console.timeEnd('getNumCharsMatchRegExp');
     
    				console.time('getNumCharsMatchLowerCase');
    				console.log(getNumCharsMatchLowerCase(str, 'i'));
    				console.timeEnd('getNumCharsMatchLowerCase');
     
    				console.time('getNumCharsSplitRegExp');
    				console.log(getNumCharsSplitRegExp(str, 'i'));
    				console.timeEnd('getNumCharsSplitRegExp');
     
    				console.time('getNumCharsSplitLowerCase');
    				console.log(getNumCharsSplitLowerCase(str, 'i'));
    				console.timeEnd('getNumCharsSplitLowerCase');
    			}
    résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    createarray: 145ms
     
    999999
    getNumCharsMatchRegExp: 320ms
     
    999999
    getNumCharsMatchLowerCase: 354ms
     
    999999
    getNumCharsSplitRegExp: 137ms
     
    999999
    getNumCharsSplitLowerCase: 60ms

  8. #8
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    oui ou un poil moins gourmands:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    function getNumChars(str, char) {
       return str.split(char).length -1 ;
    }
    tu ne gère pas la casse
    donc si je mets un A majuscule et que dans mon texte je n'ai que des "a", ta fonction me retournera 0

  9. #9
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    ce n'est pas si étonnant vu que tu crées à chaque fois une new RegExp

  10. #10
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    ce n'est pas si étonnant vu que tu crées à chaque fois une new RegExp
    la regexp est créée une seule fois mon coco, regarde bien le code, il prend en paramètres le résultat de new RegExp, mais il est bien connu que les regExp c'est plus lent en traitement que la chose la plus simple comme un split sur caractère simple par exemple.

    Tu vois bien que la fonction est appelée UNE SEULE FOIS et elle se prend donc une regexp directement en paramètre et joue avec derrière

  11. #11
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 640
    Points : 66 665
    Points
    66 665
    Billets dans le blog
    1
    Par défaut
    Arf en effet je ne sais pas pourquoi je suis aller imaginer que la creation de la reg etait dans une boucle

    il faudrait tester la solution de de Beef qui a mon avis doit etre intermédiaire niveau perfs

  12. #12
    Inactif
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    117
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 117
    Points : 142
    Points
    142
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Arf en effet je ne sais pas pourquoi je suis aller imaginer que la creation de la reg etait dans une boucle

    il faudrait tester la solution de de Beef qui a mon avis doit etre intermédiaire niveau perfs
    Elle n'est pas intermédiaire puisqu'il balance une regexp dans le split comme tu le fais dans ta fonction.

Discussions similaires

  1. [JTextArea] limiter le nombre de caractères
    Par spoutyoyo dans le forum Composants
    Réponses: 5
    Dernier message: 14/09/2007, 15h45
  2. Réponses: 7
    Dernier message: 16/11/2004, 15h45
  3. Réponses: 2
    Dernier message: 21/09/2004, 19h01
  4. [JTextField] Limiter le nombre de caractères
    Par thomas_strass dans le forum Composants
    Réponses: 2
    Dernier message: 08/09/2004, 14h06
  5. nombre de caractère retourné...
    Par sonialem2000 dans le forum Requêtes
    Réponses: 2
    Dernier message: 02/08/2004, 04h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo