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

Collection et Stream Java Discussion :

Chaîne de caractères


Sujet :

Collection et Stream Java

  1. #1
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut Chaîne de caractères
    bonjour
    j'ai une chaine de caractère janvier,mars,avril je veux la convertir 1,3,4
    j'ai fais une tentative mais ça marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    char c = (char)0;
     
    String text = "janvier,mars,avril";
     
    for(int i=0; i<text.length(); i++)
    {
     c = text.charAt(i);
    concaténation caractère puis convertir nombre
     }
    merci d'avance

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est dommage qu'il manque toute la partie que tu as tentée


    Le plus simple est de commencer par splitter la chaine au niveau de la virgule, puis de tester élément par élément

    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    String[] elements = chaine.split(";")
    List<Integer> resultat;
    for (String month : elements){
            int monthNumber = 0;
            switch (month.toLowerCase()) {
                case "january":
                    monthNumber = 1;
                    break;
                case "february":
                    monthNumber = 2;
                    break;
                case "march":
                    monthNumber = 3;
                    break;
                case "april":
                    monthNumber = 4;
                    break;
                case "may":
                    monthNumber = 5;
                    break;
                case "june":
                    monthNumber = 6;
                    break;
                case "july":
                    monthNumber = 7;
                    break;
                case "august":
                    monthNumber = 8;
                    break;
                case "september":
                    monthNumber = 9;
                    break;
                case "october":
                    monthNumber = 10;
                    break;
                case "november":
                    monthNumber = 11;
                    break;
                case "december":
                    monthNumber = 12;
                    break;
                default: 
                    monthNumber = 0;
                    break;
            }
            resultat.add(monthNumber);
    }

  3. #3
    Provisoirement toléré
    Inscrit en
    Avril 2007
    Messages
    679
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 679
    Points : 76
    Points
    76
    Par défaut
    message d'erreur sur la ligne : switch (month.toLowerCase()) {

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cannot switch on a value of type String. Only int values or enum constants are permitted

  4. #4
    Membre chevronné
    Avatar de Deadpool
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    1 312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 1 312
    Points : 2 011
    Points
    2 011
    Par défaut
    Citation Envoyé par minooo Voir le message
    message d'erreur sur la ligne : switch (month.toLowerCase()) {

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Cannot switch on a value of type String. Only int values or enum constants are permitted
    Le switch sur les String est apparu dans Java 7.

    Pour une version de java inférieure, il faut les remplacer par une suite de blocs if-else.

    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
     
    String[] elements = chaine.split(",");
    List<Integer> resultat;
    for (String month : elements){
            int monthNumber = 0;
            if ("janvier".equals(month.toLowerCase())){
                    monthNumber = 1;
            } else if ("février".equals(month.toLowerCase())){
                    monthNumber = 2;
            } else if ...
     
            } else if ("décembre".equals(month.toLowerCase())){
                    monthNumber = 12;
            } else {
                    monthNumber = 0;
            }
            resultat.add(monthNumber);
    }

    -"Tout ça me paraît très mal organisé. Je veux déposer une réclamation. Je paye mes impôts, après tout!"
    -"JE SUIS LA MORT, PAS LES IMPÔTS! MOI, JE N'ARRIVE QU'UNE FOIS".

    Pieds d'argile (1996), Terry Pratchett 1948 - 2015
    (trad. Patrick Couton)

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    eh oui, il faut passer en Java 7

    edit:
    grillé par @Deadpool à une minute près !
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    bon aller, pour chipoter, on va faire sans if ni switch
    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
            String lesMoisEnTexte = "janvier,février,août";
            String[] tabMois = lesMoisEnTexte.split(",");
            SimpleDateFormat sdfT = new SimpleDateFormat("MMMM");   // pour transformer en date le mois
            SimpleDateFormat sdfN = new SimpleDateFormat("M");      // pour ressortir seulement le N° du mois
            StringBuilder sb = new StringBuilder();
            for (String mois : tabMois) {
                try {
                    // on insère systématiquement une virgule pour séparer
                    sb.append(",").append(sdfN.format(sdfT.parse(mois)));
                } catch (ParseException ex) {
                    ex.printStackTrace();
                }
            }
            // le .substring(1) supprime la 1ère virgule
            System.out.println(sb.toString().substring(1));
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  7. #7
    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
    Personnellement j'enchaînerais 12 replace(), mais bon.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    bon aller, pour chipoter, on va faire sans if ni switch
    Rho que c'est moche et chipoté, t'aurais au moins pu

    1) forcer la Locale (ben oui, il faut "février" pas "février dans la langue de l'utilisateur")

    2) si tu voulais vraiment déléguer à java (on ne sait jamais, de fois que dans 5 ans, juillet devienne juié avec une réforme orthographique), t'aurais pu utiliser DateFormatSymbols.getMonths()

  9. #9
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    forcer la Locale
    ha ben oui, je l'oublie toujours celle-là. C'est le problème de nous autres en France, on n'a qu'une langue à gérer
    et comme on est très parisien, on a du mal à imaginer ce qu'il se passe au-delà du périphérique
    DateFormatSymbols.getMonths()
    Et puis tiens, celle-là je ne la connaissais pas encore

    Avec ça je vais pouvoir faire des applications portables jusqu'en Terre de Feu !
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

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

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Avec ça je vais pouvoir faire des applications portables jusqu'en Terre de Feu !
    Malheureusement, java ne supporte ni les locale Borg, ni le calendrier elfe de la terre du milieu

  11. #11
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 710
    Points : 4 794
    Points
    4 794
    Par défaut
    Mais si !!!!
    c'est l'intérêt de la classe DateFormatSymbols que tu m'as aimablement signalé !
    tu peux complètement redéfinir le nom des mois et des jours :

    exemple avec http://docs.oracle.com/javase/1.4.2/docs/api/java/text/DateFormatSymbols.html#setWeekdays%28java.lang.String[]%29
    lundi = kika
    mardi = tiristor
    mercredi = wlakoniquoirnodeau
    jeudi = noix d'Ardennes
    vendredi = chocolat de Brugge
    etc ...
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Réponses: 2
    Dernier message: 18/10/2003, 14h42
  3. Chaînes de caractères
    Par Zazeglu dans le forum C
    Réponses: 3
    Dernier message: 28/08/2003, 16h20
  4. Inverser une chaîne de caractères
    Par DBBB dans le forum Assembleur
    Réponses: 2
    Dernier message: 30/03/2003, 11h09
  5. Réponses: 3
    Dernier message: 09/05/2002, 01h39

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