Partage
  • Partager sur Facebook
  • Partager sur Twitter

Comparaison entre deux espace

Vive les exos du zer0!

    5 avril 2011 à 2:57:17

    Bonjour à tous!

    J'ai le problème suivant: Je doit diviser une phrase (String) en mots clés. J'ai créé une fonction qui le fait très bien avec une simple String... Plus tard, je modifie cette fonction pour que la String soit généré par un scanne et cela ne fonction plus... o_O

    Voici le code source qui fonctionne:
    package mozo.ZoTalking.Model;
    
    import java.util.ArrayList;
    
    /** <h2>Test.java</h2>
     * @Projet ZoTalking
     * @Package mozo.ZoTalking.Model
     * @Auteur MoZo[MasteR] || Mathieu Duhaime
     * @Création 2011-04-04 à 20:42:25
     * @Modification 2011-04-04
     * @Description
     * 		Test d'exemple!  */
    public class Test {
    	private boolean saisiComplete = false;
    	private ArrayList<String> motsClés = new ArrayList<String>();
    	private String motCléCourant = "";
    	private String saisi = "Test de test... abc";
    
    	public void run(String saisi0){
    		try{
    			for(int i=0;!saisiComplete ; i++){
    				if(saisi.charAt(i)==' '){
    					motsClés.add(motCléCourant );
    					System.out.println("\nSéparation: "+motCléCourant+"\n");
    					motCléCourant = "";
    				}
    				else{
    					motCléCourant += saisi.charAt(i);
    					System.out.println("Après addition: "+motCléCourant+" et i = "+i);
    				}
    			}
    		}
    		catch (StringIndexOutOfBoundsException e){
    			motsClés.add(motCléCourant );
    			saisiComplete = true;
    		}
    		for(int i=0; i<motsClés.size(); i++)
    			System.out.println("Mots clés "+i+" = "+motsClés.get(i));
    	}
    
    	public static void main(String[] args) {
    		new Test.run();
    	}
    }
    }
    

    Ce qui affiche ceci:
    Après addition: T et i = 0
    Après addition: Te et i = 1
    Après addition: Tes et i = 2
    Après addition: Test et i = 3
    
    Séparation: Test
    
    Après addition: d et i = 5
    Après addition: de et i = 6
    
    Séparation: de
    
    Après addition: t et i = 8
    Après addition: te et i = 9
    Après addition: tes et i = 10
    Après addition: test et i = 11
    Après addition: test. et i = 12
    Après addition: test.. et i = 13
    Après addition: test... et i = 14
    
    Séparation: test...
    
    Après addition: a et i = 16
    Après addition: ab et i = 17
    Après addition: abc et i = 18
    
    Mots clés 0 = Test
    
    Mots clés 1 = de
    
    Mots clés 2 = test...
    
    Mots clés 3 = abc


    Cela fonctionne comme je le voudrais... Mais celui-là non!
    package mozo.ZoTalking.Model;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /** <h2>Test.java</h2>
     * @Projet ZoTalking
     * @Package mozo.ZoTalking.Model
     * @Auteur MoZo[MasteR] || Mathieu Duhaime
     * @Création 2011-04-04 à 20:42:25
     * @Modification 2011-04-04
     * @Description
     * 		TODO */
    public class Test {
    	private boolean saisiComplete = false;
    	private ArrayList<String> motsClés = new ArrayList<String>();
    	private String motCléCourant = "";
    	private static Scanner scanner = new Scanner(System.in);
    
    	public void run(String saisi){
    		try{
    			for(int i=0;!saisiComplete ; i++){
    				if(saisi.charAt(i)==' '){
    					motsClés.add(motCléCourant );
    					System.out.println("\nSéparation: "+motCléCourant+"\n");
    					motCléCourant = "";
    				}
    				else{
    					motCléCourant += saisi.charAt(i);
    					System.out.println("Après addition: "+motCléCourant+" et i = "+i);
    				}
    			}
    		}
    		catch (StringIndexOutOfBoundsException e){
    			motsClés.add(motCléCourant );
    			saisiComplete = true;
    		}
    		for(int i=0; i<motsClés.size(); i++)
    			System.out.println("\nMots clés "+i+" = "+motsClés.get(i));
    	}
    
    	public static void main(String[] args) {
    		new Test().run(scanner.next());
    	}
    }
    

    Et ce qu'il affiche:
    Test de test... abc
    Après addition: T et i = 0
    Après addition: Te et i = 1
    Après addition: Tes et i = 2
    Après addition: Test et i = 3
    
    Mots clés 0 = Test


    Pouvez-vous m'aider?
    • Partager sur Facebook
    • Partager sur Twitter
      5 avril 2011 à 9:50:57

      Bonjour,

      Remplace next() par nextLine().
      next() s'arrete à l'espace donc il ne prennait que le premier mot test.
      nextLine() semble s'arréter au saut de ligne.
      • Partager sur Facebook
      • Partager sur Twitter
        6 avril 2011 à 22:43:20

        Ok, merci! :)

        Edit: J'avais oublié de dire si ça fonctionnais... :-° Et oui!
        • Partager sur Facebook
        • Partager sur Twitter

        Comparaison entre deux espace

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown