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

Android Discussion :

un string qui se lit mais ne s'utilise pas dans le code


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut un string qui se lit mais ne s'utilise pas dans le code
    Bonjour,

    J'ai un pb avec un mot que j'arrive a afficher mais qui ne s'utilise pas dans le code :

    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
     
     
     try{
                    fIn = context.openFileInput("map0");
                    isr = new InputStreamReader(fIn);
                    isr.read(inputBuffer);
     
                    String word = new String() ;
                    String wordEnd = new String("end") ;
     
     
     
                        for (int c = 0; c < 255; c++) {
                            word += inputBuffer[c];
                            if (inputBuffer[c] == ' ') {
                                cleaner = true;
                                word = new String();                         
                            }
     
                        }
                        canvas.draw(  word ) ; // mon texte lu depuis le fichier affiche "end"
     
                        si j'essaye en revanche d'utiliser le mot exemple :
                       if ( word == "end" ) {
                       dosomthing() ;
                       }//ca ne marche pas
    Ai-je fais une erreur ?

    Merci si vous pouvez m'aider.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    on utilise .equals() pour tester l'égalité d'objets en java

  3. #3
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Tout d'abord, on ne teste pas l'égalité entre chaîne avec == mais avec equals : if ( "end".equals(word) ) {. == c'est pour l'identité.
    Ensuite, ce serait bien plus simple et plus propre d'encapsuler ton InputStreamReader dans un BufferedReader et d'utiliser sa méthode readLine(), voire d'utiliser un Scanner, puisque tu cherches des mots séparés par des espaces. En tout cas ça t'éviterait d'une part écrire ça [c]word += inputBuffer;, soit une concaténation entre une chaîne et un int, ce ne risque pas de donner le mot "end" (""+65, ça donne "65", pas "A" !), et d'autre part d'écrire des boucles en dur de 0 à 255 alors qu'il n'y aucune garantie qu'il y ait bien 255 caractères dans ton tableau.
    Au lieu d'écrire String wordEnd = new String("end");, autant écrire String wordEnd = "end";, plus simple et concis, et l'autre écriture n'est que (très) rarement utile.
    Enfin, si tu veux absolument lire caractère par caractère et concaténer, utilise plutôt un StringBuilder qu'une concaténation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int read = isr.read(inputBuffer);
     
    if ( read!=-1 ) { 
       StringBuilder wordBuilder = new StringBuilder() ;
       for (int c = 0; c < read; c++) {
           if (inputBuffer[c] == ' ') {
               wordBuilder.setLength(0);
           }
           else {
               wordBuilder.append( (char)c );
           }
       }
    }
    String word=wordBuilder.toString();
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  4. #4
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    Merci pour tous ces conseils et précisions.

    Je vais étudier tout cela.

    En fait j'aimerais lire les choses mots par mots. L'idéal serait de pouvoir lire des valeurs. Le but est de charger une map d'objet.

    Le pb effectivement avec mon système est qu'un inputBuffer va être sans doute insuffisant pour lire une grande quantité d'objets. mais je n'ai pas trouvé comment lire avec InputStreamReader autrement...

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par mazertys17 Voir le message
    Le pb effectivement avec mon système est qu'un inputBuffer va être sans doute insuffisant pour lire une grande quantité d'objets. mais je n'ai pas trouvé comment lire avec InputStreamReader autrement...
    Ce n'est pas que le buffer est trop petit : on ne lit jamais tout d'un coup, mais en plusieurs fois, la capacité du buffer limitant le maximum, et le buffer n'étant pas forcément rempli à chaque lecture.

    Le plus simple étant de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    try(BufferedReader reader = new BufferedReader(new InputStreamReader(context.openFileInput("map0")))) {
       for(String line = reader.readLine(); line!=null; line=reader.readLine()) {
          final String[] words = line.split(" "); // la ligne contient des mots séparés par des espaces
          for(String word : words ) {
              // tu peux traiter tes mots
          }
       }
    }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    521
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 521
    Par défaut
    Merci pour ta réponse, je vais essayer.

    Ce que je ne comprends pas, c'est comment savoir où reprendre la lecture quand le buffer a atteint le max de char ?
    Si mon fichier fait 10 000 mots par exemples,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     fIn = context.openFileInput("map0");
                    isr = new InputStreamReader(fIn);
                    isr.read(inputBuffer);
    Je me contente de lire que ce que mon inputBuffer peut contenir, étant un char ca reste limité sauf erreur.
    Comment faire pour lire en plusieurs fois ?

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Il faut appeler plusieurs fois isr.read(inputBuffer). Et cette méthode retourne un entier, qui vaut -1 lorsqu'il n'y a plus rien à lire, et sinon le nombre de valeurs lues. Donc il faut appeler read=isr.read(inputBuffer) tant que read ne vaut pas -1, et utiliser read comme borne supérieure de la boucle de traitement du tampon, comme dans l'exemple que j'ai mis dans ma première réponse.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MVVM] Combobox - SelectedIndex qui est trouvé mais ne s'affiche pas
    Par dacid dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 26/10/2015, 14h17
  2. Un regex qui fonctionne sur les testeurs en ligne, mais pas dans mon code
    Par billybobbonnet dans le forum Développement Windows
    Réponses: 4
    Dernier message: 28/01/2015, 17h20
  3. Réponses: 6
    Dernier message: 04/09/2008, 11h25
  4. Réponses: 4
    Dernier message: 21/02/2007, 12h04
  5. Réponses: 15
    Dernier message: 23/01/2007, 15h27

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