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 :

Affecter une valeur char à un string


Sujet :

Langage Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 60
    Points : 32
    Points
    32
    Par défaut Affecter une valeur char à un string
    Bonjour,

    Je l'ai vu partout :
    On ne peut pas affecter une valeur d'un type primitif à un object string telle une affectaion normale mais.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    //on ne peut pas faire ceci n'est-pas?
    String chaine26 = null;
    char tabReponse [];
     
    tabReponse =new char [4];
    tabReponse [0] = 'M';
    tabReponse [1] = 'O';
    tabReponse [2] = 'T';
    tabReponse [3] = 'S';
     
    chaine26 = tabReponse [0];
     
    //au passage, comment fait-on ceci?
    chaine26 += tabReponse [1];
    pouvez-vous m'aider s'il vous plaît?

  2. #2
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Le plus simple pour passer d'un char à une String est de faire : String s = String.valueOf(c);.

    Soit dans ton cas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    chaine26 = String.valueOf( tabReponse [0] );
    Maintenant, pour accumer caractère par caractère et obtenir une chaîne de caractère, le plus simple est d'utiliser un StringBuilder :

    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
    StringBuilder sb = new StringBuilder();
    
    sb.append('a'); 
    
    System.out.println( sb ) ; // affiche a
    
    sb.append('b'); 
    
    System.out.println( sb ) ; // affiche ab
    
    // si on a besoin d'une String :
    String s = sb.toString(); // s vaut "ab"
    
    
    Toutefois, si tu veux créer une String à partir d'un tableau complètement rempli de char, autant faire :
    
    
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123
     
    char[] chararray = {'a','b','c','d'};
    String s = new String( chararray );
    Au passage, même si la syntaxe le permet (çà a été fait pour aider les programmeurs c ), au lieu de int tab[];, c'est mieux d'écrire int[] tab;. C'est mieux parce que plus logique (le type (ici tableau de int), suivi du nom, suivi d'un opérateur, suivi de... s'applique tout le temps), parce que moins de risque de plus rien comprendre (entre le int[] c et le int c[] et les c[c[c[0]], et les int[] d[]; , voire int[][][] d[][][][] en plus (oui oui !), etc).
    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.

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Salut,

    Il vaut mieux que je t'explique ma situation, car c'est plus compliqué que je le pensais.
    Dans une autre discussion, j'ai appris à distribuer un string dans un tableau avec toCharArray(), et maintenant je souhaite le réassembler à la fin de mon programme:
    Dans l'exemple que j'ai donné au début, chaine26 serait égale à "MOTS". Je me suis dit que l'on ne pouvait pas additionner une valeur à quelque chose de vide (String chaine26 = null,
    donc je me suis dit que l'on pouvait créer une boucle for(int i = 0; i < tabReponse.lenght; i++) et à l'intérieur insérer une condition if.

    Si i est égal à un, affecter tabReponse [0] à chaine26.

    Si i est supérieur à un, ajouter tabReponse [i] à chaine26.

    Sûrement que ce n'est pas la bonne méthode.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Pardon j'avais pas vu cette partie là de ton message

    Citation Envoyé par joel.drigo Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    char[] chararray = {'a','b','c','d'};
    String s = new String( chararray );
    donc le plus simple est de créer un nouveau string.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Sticonik Voir le message
    Si i est égal à un, affecter tabReponse [0] à chaine26.

    Si i est supérieur à un, ajouter tabReponse [i] à chaine26.
    ça n'a pas de sens : on affecte pas un char à une chaîne, null ou pas.

    Soit on doit construire la chaîne petit à petit et on utilise plutôt un StringBuilder.

    Par exemple, pour ne récupérer que les minuscules dans la chaîne finale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    StringBuilder sb = new StringBuilder();
    for(int i=0; i<tab.length; i++) {
       if ( tab[i]>='a' && tab[i]<='z' ) {
           sb.append(tab[i]);
       }
    }
    String s=sb.toString();
    Tu verras peut-être ce genre de code, qui pourrait ressembler le plus à la traduction de ton idée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String s="";
    for(int i=0; i<tab.length; i++) {
       if ( tab[i]>='a' && tab[i]<='z' ) {
           s+=tab[i];
       }
    }
    On ne fait pas ça en Java, même si le résultat est bon, pour des raisons de performance. Dans ce cas, le code réellement exécuté correspond plus ou moins à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String s="";
    for(int i=0; i<tab.length; i++) {
       StringBuilder sb = new StringBuilder(s);
       if ( tab[i]>='a' && tab[i]<='z' ) {
          sb.append(tab[i]);
       }
       s = sb.toString();
    }
    Dans ce cas, on exécute tab.length fois new StringBuilder() et sb.toString(), alors que dans le cas avec un seul StringBuilder on ne le fait qu'une seule fois, quelque soit la taille du tableau.

    Pour être exactement dans l'implémentation de ton idée, le test sur la première fois complique vraiment le programme : savoir qu'on est sur la première lettre de la chaîne, on peut toujours le faire avec s==null (en initialisant la chaîne à null), ou avec s.length()==0, mais affecter le char il faut faire une conversion s=String.valueOf(tab[i]); (et surtout pas c't'horreur : s = ""+tab[i]). Mais ça fait encore des trucs en plus à exécuter et beaucoup de code alors qu'on peut faire plus simple.

    Evidemment, si on doit créer la chaîne directement à partir du tableau, sans le test/filtre, autant utiliser new String(char[]).


    Bien sûr il existe d'autres moyens plus avancés que tu découvriras plus tard.
    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
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    Salut,

    j'ai choisi de déclarer mon string comme ceci dans une boucle do {...}while, puis de l'utiliser dans la condition de cette boucle, mais je ne sais pas si, dans la condition il est encore existant. Je te présente une version simplifiée de mon code.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    String solution = "tortue";
    char [] tabSolution;
    tabSolution = new char [2];
    tabSolution [0] = 'L';
    tabSolution [1] = 'A';
    do{
        // il y a d'autres choses dans la boucle évidemment.
        String verifie = new String ( tabSolution );
    }while(!(solution.equals(verifie))); //verifie existe-t-il encore?? (puisque je l'ai déclaré à l'intérieur de la boucle)
    Dans tous les cas, il y a un problème avec ce "verifie", et que ce soit ce que j'ai évoqué, ou autre chose, peux-tu me donner une alternative?
    le problème il me semble, c'est que si je le déclare à l'extérieur de la boucle, c'est que la valeur restera fixe, et je souhaite qu'elle évolue avec la boucle.
    Je peux aussi déclarer le string à l'exterieur de la boucle mais affecter avec valueOf tabSolution à verifier à l'intérieur de la boucle mais j'ai découvert dans les messages précédant celui-ci que ce n'était pas très simple.

  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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Tu ne peux déclarer verifie dans le bloc de la boucle et l'utiliser dans la condition, car la portée du bloc s'arrête au bloc et que la condition est en dehors du bloc.

    Il suffit de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String verifie;
    do{
        // il y a d'autres choses dans la boucle évidemment.
        verifie = new String ( tabSolution );
    }while(!solution.equals(verifie));
    une solution avec la déclaration dans le bloc de la boucle serait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    do{
        // il y a d'autres choses dans la boucle évidemment.
        String verifie = new String ( tabSolution );
        if ( solution.equals(verifie) ) {
            break;
        }
    } while( true );
    Mais on évite en général de faire des boucles explicitement infinies même avec condition interne de sortie, pour éviter le risque de programme qui ne s'arrête jamais.

    Une solution avec une portée de bloc, pas très académique je dirais, mais qui fonctionne très bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for(String verifie=null; !solution.equals(verifie) ; ) {
        // il y a d'autres choses dans la boucle évidemment.
        verifie = new String ( tabSolution );
    }
    Cela fonctionne parce qu'à la première itération, verifie est null, donc solution.equals(verifie) est faux, donc on entre bien dans la boucle. Ensuite, on boucle tant que !solution.equals(verifie) et donc on est exactement dans la même situation que le do/while.

    Par ailleurs tout ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    char [] tabSolution;
    tabSolution = new char [2];
    tabSolution [0] = 'L';
    tabSolution [1] = 'A';
    Tu peux le simplifier en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    char [] tabSolution = { 'L', 'A' };
    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.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 20
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 60
    Points : 32
    Points
    32
    Par défaut
    merci beaucoup!

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

Discussions similaires

  1. Affecter une valeur à un input type="file" ?
    Par rocs dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/08/2005, 11h10
  2. Affecter une valeur à un input type text
    Par mr.t dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 01/06/2005, 15h18
  3. Réponses: 4
    Dernier message: 07/04/2005, 13h37
  4. Affecter une valeur à un radiobutton svp
    Par bigfoot dans le forum Bases de données
    Réponses: 5
    Dernier message: 30/12/2004, 11h17
  5. [scriplet] affecter une valeur par un bean:write
    Par viena dans le forum Servlets/JSP
    Réponses: 5
    Dernier message: 25/11/2004, 16h29

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