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

avec Java Discussion :

Multiplier les chiffres dans une chaîne de caractères


Sujet :

avec Java

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut Multiplier les chiffres dans une chaîne de caractères
    Bonjour

    j'ai deux fichiers comme suit:
    le premier contient un mot ou un mots composé par lignse exemple:
    aaaaaa
    aaaa bbbb
    aabbbbbb aa
    dddd
    et le deuxième contient des mots suivis par des chiffres exemple
    aaaaaa 8.3333
    aaaa b 7.3333
    aab 6.22222
    dddd 1.3333

    je voulais écrire un programme java qui compare ces deux fichiers et s'il trouve une ligne en commun (le cas de la ligne 1 et 4) il multiplie le chiffre qui lui correspond par 2.
    le fichier 2 doit devenir comme ça:
    aaaaaa 16.6666
    aaaa b 7.3333
    aab 6.22222
    dddd 2.6666

    La difficulté que je trouve est comment accéder en premier lieu a ces mots dans le deuxième fichier sans prendre en considération les chiffres pour pouvoir les comparer avec les mots du premier fichier puis en deuxième lieu comment accéder seulement au chiffres correspondant aux mots se trouvant dans les deux fichiers pour les multiplier par 2.

    Merci d'avance

  2. #2
    Membre du Club
    Inscrit en
    Juillet 2010
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 58
    Points : 52
    Points
    52
    Par défaut
    Bonjour

    Pour découper une chaîne de caractère, tu peux utiliser StringTokenizer

    http://docs.oracle.com/javase/1.4.2/...Tokenizer.html

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
      String str="aaaaaa 16.6666";
      String  aaa=null;
      Double nombre=null;
     
       //tu splitte ta châine en fonction de l'espace
       StringTokenizer stringTokenizer = new StringTokenizer(str);
     
            //Parcours
            while (stringTokenizer.hasMoreElements())
            {
                  aaa=stringTokenizer.nextElement().toString();
                  nombre=Double.parseDouble(stringTokenizer.nextElement().toString());
            }
    Je ne sais pas si c'est la meilleure façon de faire, mais ça devrait fonctionner

  3. #3
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Merci pour votre réponse mais j'ai testé ça et n'a rien donné
    quelqu'un pourrait me proposer une autre solution SVP

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Humm, montres nous comment tu as testé, parce que même si c'est sans doute pas la méthode la plus simple, ce que propose seb111983 devrait marcher.

    Sinon, tu peux aussi utiliser les expression régulières.

    Si tu sais que tu as une pour plusieurs chaine de caractères [a-z,A-Z] (avec ou sans espaces) suivi (ou non) d'un nombre, tu peux vite extraire la chaine de caractère et le chiffre.

    Ensuite tu boucles pour comparer; et tu changes la valeur là ou ça va bien.

  5. #5
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Carhiboux Voir le message
    Humm, montres nous comment tu as testé, parce que même si c'est sans doute pas la méthode la plus simple, ce que propose seb111983 devrait marcher.
    Techniquement non, elle ne gère pas la deuxième ligne. Mais bon... Ça aurait été sympa de dire ça, au lieu de "ça marche pas !"

    Une regex peut faire l'affaire.
    Mais moi je regarderais juste où est le dernier espace de la ligne avec lastIndexOf(), puis je ferais un subString() pour extraire la chaîne avant ce dernier espace. C'est plus simple qu'un Matcher et des group().
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Si, c'est possible, c'est pas élegant, et c'est pas aussi simple que la solution que tu propose, mais un truc du genre, ça marche :

    Code java : 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
     
    String ligneA="aaaa bbbb";
    		  String ligneA2 = "aaaa bbbb 12.254";
    		  boolean equal = true;
     
    		   //tu splitte ta châine en fonction de l'espace
    		   StringTokenizer stringTokenizerA = new StringTokenizer(ligneA);
    		   StringTokenizer stringTokenizerA2 = new StringTokenizer(ligneA2);
    		        //Parcours
    		   		if(stringTokenizerA2.countTokens() == stringTokenizerA.countTokens()+1){
    			        while (stringTokenizerA.hasMoreElements() && equal)
    			        {
    			        	if(!stringTokenizerA.nextToken().equals(stringTokenizerA2.nextToken())){
    			        		equal = false;
    			        	}
    			        }
     
    		   		}else{
    		   			equal = false;
    		   		}
                                    //si equal = true, tous les tokens sont identiques, et le dernier token de stringTokenizerA2 est le nombre
    			        // le parser et faire x2 dessus
     
    			        // reconstituer la chaine avec la nouvelle valeur

    Donc c'est pas classe, c'est pas trivial et ta solution est infiniment mieux, mais ca pouvait quand même marcher! :p

    (moi, têtu, jamais! )

  7. #7
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Merci pour vos réponses
    je suis entrain de tester la solution propsée par Carhiboux, j'ai pas su comment accéder au dernier token qui est le nombre pour le multiplier x2 et comment le mettre à jour dans mon fichier. Pourriez-vous m'aider et merci

  8. #8
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Lol, je sais pas pourquoi, mais j'ai le sentiment que tu n'aimes pas trop chercher par toi même et que tu aimerais qu'on te donne la solution toute cuite.

    La bonne solution, c'est la solution proposée par thelvin :

    Mais moi je regarderais juste où est le dernier espace de la ligne avec lastIndexOf(), puis je ferais un subString() pour extraire la chaîne avant ce dernier espace. C'est plus simple qu'un Matcher et des group().
    La mienne, c'est juste de la mauvaise foi pour montrer que la solution que j'ai dit qui pourrait marcher peut effectivement marcher.

    Mais je te déconseille quand même de l'utiliser. Surtout que mon code est (volontairement pour le coup) incomplet.

    La solution de thelvin est beaucoup plus simple à implémenter. Encore faut-il se donner la peine de comprendre et de la mettre en place!

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par Carhiboux Voir le message
    Donc c'est pas classe, c'est pas trivial et ta solution est infiniment mieux, mais ca pouvait quand même marcher! :p
    J'ai pas dit que cette approche ne pouvait pas être adaptée pour gérer. J'ai dit qu'elle gérait pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Merci pour vous
    mais vraiment je suis débutante en java c'est pour ça que je pose pleins de questions j'ai essayé la solution de thelvin avant que vous me proposez la tienne mais j'ai trouvé un problème dans l’accès aux nombre et leurs multiplication j'ai essayer de les détecter de la même manière que les string c'est à dire avec lastIndexOf() et subString() mais je trouve encore de problèmes en tout cas merci pour vos solutions et veuillez m'excuser pour le dérangement.

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ben oui mais on va pas deviner ce que c'est, tes problèmes. Il va bien falloir que t'en parles un jour ou l'autre, si tu veux un coup de main.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    Merci encore une fois pour votre solution je vais l'essayer encore et j'espère que je réussisse cette fois ci

  13. #13
    Membre éclairé Avatar de Ceddoc
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 493
    Points : 698
    Points
    698
    Par défaut
    Personne n'a dit qu'on ne voulait pas aider, mais il faut que tu nous donnes plus de détails sur là ou tu bloques. Montres nous le code le plus aboutis que tu as, dit le problème (si c'est une exception, donne nous la stacktrace) et on essaiera de te guider vers une solutions.

    Si tu nous dis juste "je n'y arrive pas", nous n'avons aucun moyen de t'aider, nous ne pouvons pas deviner pourquoi tu n'y arrive pas.

  14. #14
    Nouveau membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    57
    Détails du profil
    Informations personnelles :
    Sexe : Femme

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

    Informations forums :
    Inscription : Décembre 2011
    Messages : 57
    Points : 25
    Points
    25
    Par défaut
    j'ai fait la première partie de mon code qui compare les lignes maintenant je voulais en cas ou je trouve deux lignes identiques je multiplie le nombre correspondant aux ligne du deuxième fichier *2 j'ai essayé la méthode replace() pour remplacer l'ancienne valeur par la nouvelle (c'est à dire l'ancienne *2) comme suit:
    list4[j].replace(list4[j].substring(list4[j].lastIndexOf(" ")),(Float.valueOf(list4[j].substring(list4[j].lastIndexOf(" ")*2))).toString());
    mais le programme me signale cette erreur :

    "Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -20"

    saviez-vous comment la corriger?

  15. #15
    Expert éminent sénior
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Points : 16 092
    Points
    16 092
    Par défaut
    Montre nous le code complet parce que là en l'état on ne peut pas t'aider.

    L'erreur te dit que tu essayes d’accéder à l’élément d'indice -20 de ton tableau. Ce qui évidement tombe en erreur.

    Essaye dans un premier temps de décomposer ton opération au lieu de faire tout sur une seule ligne...

    Cela t'aidera sans doute à voir ou est ton erreur en passant en débug dans ton code.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/11/2011, 22h31
  2. Supprimer les espaces dans une chaîne de caractère
    Par Med_be dans le forum Débuter
    Réponses: 7
    Dernier message: 15/11/2010, 03h17
  3. Réponses: 16
    Dernier message: 19/11/2008, 12h02
  4. Effacer les espaces dans une chaîne de caractères
    Par JohnnyWalk dans le forum Débuter avec Java
    Réponses: 16
    Dernier message: 19/07/2007, 14h13
  5. [Tableaux] Extraire les chiffres dans une chaîne
    Par Digiduck dans le forum Langage
    Réponses: 8
    Dernier message: 16/08/2006, 14h33

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