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
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
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?
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
un split je ne crois pas que c la bonne idée...
Par contre la méthode indexOf est une bonne idée à réfléchir si possible...
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!)
Sinon expressions rationnelles.......
Ben
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
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 :
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
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;
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
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!
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.Envoyé par djsbens
g essayé avec split mais ça ne va pas...
il me met "matches: 0"
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; } }
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.
Et il devrait te mettre combien ?Envoyé par delph1983
8!!
et je ne comprend tjs pas comment le indexOf marche...![]()
maChaine n'est pas vide?
EDIT : de plus c''est quoi ListRep.get()? test si c pas null tout ca
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 !
Le code est-il correcte?
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); chaineToSplit = " " + maChaine + " "; tabChaine = chaineToSplit.split(ListRep.getWord()); match = tabChaine.length - 1; }
[EDIT]ça fonctionne avec maChaine = " tentation " et word = "tenta"? Il retourne {" ", "tion"}. Ce qui incorrecte.
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]
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...
C'est correct, si tu fais taille -1Envoyé par jowo
hum en fait les mots sont avec une majascule
donc c'est pour ça qu'il ne les trouvaient pas...![]()
mais alors comment faire pour les accents?
ok pour les majuscule
merci de vos réponses il trouve bien les 8 mots!!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager