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

Langage Java Discussion :

Recherche dans un String [Débutant(e)]


Sujet :

Langage Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut Recherche dans un String
    Bonjour!!!

    comment faire pour rechercher un mot précis et dire le nbre de fois qu'il s'y trouve, dans un String???

    j'ai essayé plusieurs choses mais ça ne marche pas

    avez vous une idée??

    merci

    Delph

  2. #2
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Il y a de nombreuses possibilités.

    Tu as les expressions rationnelles (voir java.util.regex) ou la méthode indexOf de la classe String.

    Mais le problème principal de ton algo est: qu'est-ce qu'un mot?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    J'imagine que du coté des expressions reguliere il doit y avoir ce qu'il faut , sinon peut etre qu'un split avec comme paramtre la chaine dont tu cherches le nombre d'occurence te permetras d'avoir un tableau dont la taille-1 te donneras le nombre d'occurence .
    Enfin peut etre qu'eventuellement ca peut marcher

    EDIT : Probleme: le nombre d'occurence n'est pas forcement egale a taille-1 puisque dans le cas ou le dernier mot de la chaine totale est le mot que tu cherche a priori ca serais taille , il faut donc faire un traitement supplementaire afin d'etre sur ce qui rend cette idée bcp moins bonne

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    un split je ne crois pas que c la bonne idée...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String maChaine = "mottytytyytmottytytyttutr";
    maChaine.split("mot") --> renvoie un tableau contenant tytytyyt,tytytyttutr ,(enfin je crois!)
    Par contre la méthode indexOf est une bonne idée à réfléchir si possible...

    Sinon expressions rationnelles.......

    Ben

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    en fait j'utilise pdfBox qui me met une page d'un doc pdf dans un gros String, et comme le but de mon appli est de rechercher le mot 'rapport' dans ce document je voulais trouver une solution.

    pourriez vous exliquer indexOf? pcq je ne vois pas le rapport
    merci

  6. #6
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Split n'est pas une mauvaise idée je pense, quoi que pas optimale

    Le problème c'est si le mot est à la fin ou au début, mais tu peut rajouter un espace au début et à la fin et ainsi faire un split

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    String maChaine = "mottytytyytmottytytyttutrmot"; 
    String chaineToSplit = " " + maChaine +  " ";
    String[] tabChaine = chaineToSplit.split("mot");
    //Le tableau contiendra : " " , "tytytyyt" , "tytytyttutr" , " ";
    //Donc une taille de 4 pour 3 occurences
    int occurences = tabChaine.lenght - 1;
    Je sais pas si ce code marche tout le temps, et c'est certainement par la meillere manière de faire, mais ca doit pouvoir marcher

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    j'ai trouver un lien intéressant pour toi...

    Je ne vois pas en fait avec index of.

    Il parle de StringTokenizer je pense que ca peut etre mieux.

    http://forums.macgeneration.com/vbul....php?p=3667820

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    a d'accord witchtounet en fait si ca peut marcher avec split!!!

    C vrai on s'en fou de ce qu'il renvoie le plus important est de savoir la longeur du tableau qu'il renvoie!

    C'est je pense la moins difficile a mettre en oeuvre!

  9. #9
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Citation Envoyé par djsbens
    j'ai trouver un lien intéressant pour toi...

    Je ne vois pas en fait avec index of.

    Il parle de StringTokenizer je pense que ca peut etre mieux.

    http://forums.macgeneration.com/vbul....php?p=3667820
    indexOf retourne la position d'un subString (mot) dans un String (paragraphe). Il suffit ensuite de détecter si c'est réellement un mot et de compter les occurences de ce mot.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    g essayé avec split mais ça ne va pas...

    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
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
     
    public static String Lect(String filename) throws IOException, CryptographyException
        {
    		String str = "";
    		String maChaine;
    		String chaineToSplit;
    		String[] tabChaine;
    		int match=0;
    		System.out.println("******** Début du traitement du fichier PDF: " +filename+ " ********\n"); 
            PDDocument pdf = null;
            FileInputStream fin = new FileInputStream(filename);
     
            try
            {
            	pdf = PDDocument.load( filename );
            	if( pdf.isEncrypted() )
                {
            		System.out.println("You do not have the permission\n");
            		str=null;
                    try
                    {
                        pdf.decrypt("");
                    }
                    catch( InvalidPasswordException e )
                    {
                       System.err.println( "Error: The document is encrypted." );
                    }
                }
            	else
            	{
     
            		PDFTextStripper txt = new PDFTextStripper();     
            		for(int i=12;i<txt.getEndPage();i++){
            			txt.setStartPage(i);
            			txt.setEndPage(i);   
     
            			maChaine = txt.getText(pdf); 
            			chaineToSplit = " " + maChaine +  " "; 
            			tabChaine = chaineToSplit.split(ListRep.getWord()); 
            			match = tabChaine.length - 1;        			
            		}
            		System.out.println("matches: "+match);
            		if (match!=0){
            			str = "There are "+match+" words corresponding to your search";
            		}
            		else{
            			str = null;
            		}
     
            		//lucene doc
            		//Document doc = LucenePDFDocument.getDocument(fin);
            	}
     
            }
            finally
            {
                if( pdf != null )
                {
                    pdf.close();
                }
            }
     
            System.out.println("******** Fin du traitement du fichier PDF ********\n"); 
            return str;
        }
    }
    il me met "matches: 0"

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    donc fodrait boucler tant que la fin du string n'a pas ete atteint et faire un nouveau indexof a chaque fois?

    C plus aisé avec un split alors.

  12. #12
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par delph1983
    il me met "matches: 0"
    Et il devrait te mettre combien ?

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    8!!

    et je ne comprend tjs pas comment le indexOf marche...

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    135
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 135
    Points : 110
    Points
    110
    Par défaut
    maChaine n'est pas vide?

    EDIT : de plus c''est quoi ListRep.get()? test si c pas null tout ca

  15. #15
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    509
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 509
    Points : 568
    Points
    568
    Par défaut
    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
     
                  PDFTextStripper txt = new PDFTextStripper();     
                  for(int i=12;i<txt.getEndPage();i++){
                     txt.setStartPage(i);
                     txt.setEndPage(i);   
     
                     maChaine = txt.getText(pdf);
                     chaineToSplit = " " + maChaine +  " ";
                     tabChaine = chaineToSplit.split(ListRep.getWord());
                     match = tabChaine.length - 1;                 
                  }
                  System.out.println("matches: "+match);
                  if (match!=0){
                     str = "There are "+match+" words corresponding to your search";
                  }
                  else{
                     str = null;
                  }

    Le match etant reinitialiser a chaque passage dans la boucle, il ne t'indique que le nombre d'occurence du mot de la derniere ligne enfin si j'ai bien compris le code !

  16. #16
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 414
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 414
    Points : 1 996
    Points
    1 996
    Par défaut
    Le code est-il correcte?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
                  for(int i=12;i<txt.getEndPage();i++){
                     txt.setStartPage(i);
                     txt.setEndPage(i);   
     
                     maChaine = txt.getText(pdf);
                     chaineToSplit = " " + maChaine +  " ";
                     tabChaine = chaineToSplit.split(ListRep.getWord());
                     match = tabChaine.length - 1;                 
                  }
    A mon avis, il devrait être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(int i=12;i<txt.getEndPage();i++){
                     txt.setStartPage(i);
                     txt.setEndPage(i);   
     
                     maChaine = txt.getText(pdf);
     
                     tabChaine = chaineToSplit.split(ListRep.getWord());
                     match += tabChaine.length - 1;                 
                  }
    [EDIT]ça fonctionne avec maChaine = " tentation " et word = "tenta"? Il retourne {" ", "tion"}. Ce qui incorrecte.
    [/EDIT]

  17. #17
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Ouais la version de jowo me semble juste, avant tu ne prenais en compte le nombre d'occurences quand dans la derniere page avec ta méthode...

    Citation Envoyé par jowo
    [EDIT]ça fonctionne avec maChaine = " tentation " et word = "tenta"? Il retourne {" ", "tion"}. Ce qui incorrecte.
    [/EDIT]
    C'est correct, si tu fais taille -1

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    hum en fait les mots sont avec une majascule
    donc c'est pour ça qu'il ne les trouvaient pas...

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    mais alors comment faire pour les accents?

    ok pour les majuscule

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 198
    Points : 85
    Points
    85
    Par défaut
    merci de vos réponses il trouve bien les 8 mots!!

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Rechercher dans un String
    Par assistech dans le forum Android
    Réponses: 2
    Dernier message: 12/01/2015, 18h10
  2. recherche dans des strings
    Par kiby56 dans le forum Général Python
    Réponses: 3
    Dernier message: 08/01/2013, 13h38
  3. [XL-2000] recherche dans un string
    Par zandru dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 23/09/2009, 15h46
  4. Recherche dans un string array
    Par NicoNGRI dans le forum C#
    Réponses: 2
    Dernier message: 15/02/2007, 09h54
  5. recherche dans un string
    Par ericmart dans le forum ASP
    Réponses: 2
    Dernier message: 28/02/2005, 19h16

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