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 :

Comparaison Stringbuffer et identique mais ?


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Battosaiii
    Invité(e)
    Par défaut Comparaison Stringbuffer et identique mais ?
    Bonjour,

    Je voudrais comparer 2 StringBuffer de cette facon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String filename ="/aspen/src/wsdlgen/sample_client_cxx.js.bi";
    		String line;
    		StringBuffer buffer = translator.translateToJS(filename);
    Dans ce code je recupere buffer qui est en fait un fichier StringBuffer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    		BufferedReader input = new BufferedReader(new FileReader("/aspen/test/system/java/src/wsdlgen/BiTranslator/output.txt"));
    		StringBuffer buf2 = new StringBuffer();
    		while((line =input.readLine())!= null) {
    			buf2.append(line + "\n");
    		}
    		System.out.println(" output real = \n"+buffer);
    		System.out.println("\n\n\n\n\n\n output comp = \n"+buf2);
    		assertTrue(buffer.equals(buf2));
    Dans ce code je recupere le texte d'un fichier qui contient axcatement la meme chose que le precedent.

    les 2 buffer ne sont pas equivalents.
    Pourtant d'apres les 2 System.out ils ont l'air identiques ? Quelles methodes je pourrais utiliser pour comparer un Stringbuffer et un fichier ?

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    La classe StringBuffer ne redéfinit pas la méthode equals (probablement parce que la classe StringBuffer n'est pas une classe immuable), donc la méthode equals de StringBuffer renvoie n'importe quoi.

    Il faut passer par celle de String ; cela te donnera quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (stringbuffer1.toString().equals(stringbuffer2.toString()))

  3. #3
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,
    1. La classe StringBuffer n'implémente pas la méthode equals() et n'effectue donc aucune comparaison de valeur mais seulement une comparaison de référence qui renverra donc toujours false. Tu dois donc convertir tes StringBuffer en String pour les comparer...
    2. Attention aux charsets qui peuvent affecter la comparaison. Pour spécifier un charset tu dois remplacer le new Filereader par ceci :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      new InputStreamReader( new FileInputStream("fichier"), "charset" );
    3. Attention aux codes de fin de ligne qui peuvent être différentes selon les systèmes ("\n", "\r\n" ou "\r"). Tu peux éviter cela en lisant exactement ce qu'il y a dans le fichier en gérant toi même la lecture bufférisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            Reader input = new FileReader("/aspen/test/system/java/src/wsdlgen/BiTranslator/output.txt");
            StringBuffer buf2 = new StringBuffer();
     
            char[] cbuf = new char[8192];
            int len;
            while((len =input.read(cbuf)) > 0) {
                buf2.append(cbuf, 0, len);
            }
    a++

    [edit] grillé

  4. #4
    Battosaiii
    Invité(e)
    Par défaut
    Tout d'abord merci des reponses.
    Le probleme ne semble pas venir de la car lorsque j'affiche avec Systen.ou.println la valeur des Stringbuffer j'obtiens du texte.
    J'ai essaye vos methodes mais cela ne marche pas.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                if (params.isPrimitive[j] == false) {
     
     print("        cout << \"Recvd: \" << endl;")
     print("        cout << to_string(" + params.outParamNames[j] + ").c
    _str() << endl;")
     print()
     
                }
             }
         }
     }
    le second code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
                 if (params.isPrimitive[j] == false) {
     
     print("        cout << \"Recvd: \" << endl;")
     print("        cout << to_string(" + params.outParamNames[j] + ").c
    _str() << endl;")
     print()
     
                 }
             }
         }
     }

    A vu de nez ca a l'air similaire mais il suffit d'un \n en plus ou en moins et tout
    est saccage.

    Que faire ?

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Battosaiii
    TLe probleme ne semble pas venir de la car lorsque j'affiche avec Systen.ou.println la valeur des Stringbuffer j'obtiens du texte.
    Lorsque tu utilises System.out tu utilises la méthode toString() du StringBuffer qui le transforme en String...

    As-tu au moins essayé ?

    a++

  6. #6
    Battosaiii
    Invité(e)
    Par défaut
    Oui oui bien sur .
    J'ai compare les 2 fichiers output et expected avec clearcase et ils sont les memes !

    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
     
    String filename ="/aspen/src/wsdlgen/sample_client_cxx.js.bi";
    		String line;
    		StringBuffer buffer = translator.translateToJS(filename);
     
    		PrintWriter output = new PrintWriter(new BufferedWriter(new FileWriter("/aspen/test/system/java/src/wsdlgen/BiTranslator/output.txt")));
    		output.println(buffer);
    		output.close();
     
    		BufferedReader input = new BufferedReader(new FileReader("/aspen/test/system/java/src/wsdlgen/BiTranslator/expected.txt"));
     
    		StringBuffer buf2 = new StringBuffer();
    		while((line =input.readLine())!= null) {
    			buf2.append(line + "\n");
    		}
     
    		assertTrue(buffer.toString().equals(buf2.toString()));

  7. #7
    Battosaiii
    Invité(e)
    Par défaut
    ok ca marche .
    Ma solution :

    J'ai creer 2 fichiers et je les ai comparer ligne par ligne. Cela marche sans probleme !

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/10/2007, 20h55
  2. Réponses: 10
    Dernier message: 12/03/2007, 15h09
  3. Réponses: 21
    Dernier message: 24/01/2007, 21h29
  4. [Conception] Deux codes identique mais un qui fonctionne pas
    Par fabrice88 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/08/2006, 17h25
  5. fusionner 2 tables dont les champs sont identiques mais.....
    Par NoobX dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/10/2005, 16h12

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