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 :

Mettre en majuscules certains char d'un string avec des conditions


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Par défaut Mettre en majuscules certains char d'un string avec des conditions
    Je souhaite si on me donne en parametre de ma methode pouvoir obtenir Donc en tenant compte des espaces et autres mettre en majuscule les premiers char.

    Avez vous une solution?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par défaut
    Humm, alors réponses instantanée : expression régulière.

    Mais ça risque d'être vite incompréhensible, donc non maintenable.

    Ce que tu peux faire de plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Pour chaque caractère
        Si tu trouves un caractère spécial* 
            Mettre le flag majuscule à vrai
        Sinon 
            Si flag majuscule à vrai
                Transformer la lettre en majuscule
            Fin si
        Fin si
    Et donc tes caractères spéciaux, ce sont les espace, les ?, etc bref tout ce qui doit déclencher de mettre une majuscule au caractère suivant.

  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,

    Citation Envoyé par Carhiboux Voir le message
    Humm, alors réponses instantanée : expression régulière.

    Mais ça risque d'être vite incompréhensible, donc non maintenable.
    Pas forcément !

    On peut simplement utiliser "\\b\\p{Ll}" pour rechercher ces premières lettres :
    • \\b représente un séparateur de mot.
    • \\p{Ll} représentre une lettre en minuscule ("Letter lowercase")


    Après il suffit de faire un replaceAll() "à la main", car le replaceAll() originel est assez limité. Mais ce n'est pas bien méchant :
    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
    	public static String firstLetterUpperCase(String input) {
    		// On recherche les premières lettres en minuscule :
    		Pattern pattern = Pattern.compile("\\b\\p{Ll}");
    		Matcher matcher = pattern.matcher(input);
    		// Si on trouve au moins un élément :
    		if (matcher.find()) {
    			// On doit construire une nouvelle chaine :
    			StringBuffer sb = new StringBuffer(input.length());
    			do {
    				// On effectue le remplacement :
    				String replacement = matcher.group().toUpperCase();
    				matcher.appendReplacement(sb, Matcher.quoteReplacement(replacement));
    			} while (matcher.find());
    			matcher.appendTail(sb);
    			return sb.toString();
    		}
    		return input;
    	}

    a++

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Par défaut de
    Bonjour,

    Comment determinier qu'on retrouve un caractère special?

  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
    C'est à dire ?


    a++

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Après il suffit de faire un replaceAll() "à la main", car le replaceAll() originel est assez limité. Mais ce n'est pas bien méchant :
    Attention quand même, il faut aussi mettre les autres lettres en minuscules. En gros ça devient un split() entre les séquences de lettres, quoi.

    Citation Envoyé par adissa357 Voir le message
    Comment determinier qu'on retrouve un caractère special?
    ???

    C'est toi qui as dit que tu as des règles à respecter. On ne va pas deviner lesquelles.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    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 thelvin Voir le message
    Attention quand même, il faut aussi mettre les autres lettres en minuscules. En gros ça devient un split() entre les séquences de lettres, quoi.
    Ou tout simplement en faisant un toLowerCase() juste avant


    a++

  8. #8
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut
    @Carhiboux
    je pense que vous avez oublié d'initialiser le flag au début de la boucle.

    voici un petit essai d’implémentation de l'algorithme de Carhiboux :
    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
     
    public class Test {
     
        private static StringBuffer convert(String str) {
            boolean flag;
            String charSpecials = ";\":? ,";
            StringBuffer buffer = new StringBuffer("");
     
            for (int i = 0; i < str.length(); i++) {
                flag = false;
                buffer.append(str.charAt(i));
     
                for (int j = 0; j < charSpecials.length(); j++) {
                    if (str.charAt(i) == charSpecials.charAt(j)) {
                        flag = true;
                        break;
                    }
                }
     
                if (flag == true) {
                    if (i < str.length() - 1) {
                        i++;
                    }
                    buffer.append(Character.toUpperCase(str.charAt(i)));
                }
            }
     
            buffer.deleteCharAt(buffer.length() - 1);
            return buffer;
        }
     
        public static void main(String[] args) {
            System.out.println(convert("\"aDc bbb,ddd?e:fgh\""));
        }
    }

  9. #9
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2013
    Messages : 144
    Par défaut
    Citation Envoyé par snack3r Voir le message
    @Carhiboux
    je pense que vous avez oublié d'initialiser le flag au début de la boucle.

    voici un petit essai d’implémentation de l'algorithme de Carhiboux :
    C'est bien mais ta méthode doit forcement retourner un string

  10. #10
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2012
    Messages
    3 020
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Septembre 2012
    Messages : 3 020
    Par défaut
    Hé, on est pas non plus là pour faire tes devoirs à ta place quand même...

    A toi de te creuser un peu la tête.

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Ou tout simplement en faisant un toLowerCase() juste avant
    Ah mais oui je suis con -_-°.

    Citation Envoyé par adissa357 Voir le message
    C'est bien mais ta méthode doit forcement retourner un string
    Ouais, sinon, ça te dirait de travailler un petit peu ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    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 thelvin Voir le message
    Ah mais oui je suis con -_-°.
    Meuh non !

    (en vrai je me suis un peu rattrapé aux branches car j'avais pas vu qu'il fallait mettre les autres chars en minuscules)

    a++

  13. #13
    Membre très actif
    Avatar de Snack3r
    Homme Profil pro
    Doctorant à l'Université Cheikh Anta Diop de Dakar
    Inscrit en
    Octobre 2013
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Doctorant à l'Université Cheikh Anta Diop de Dakar
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2013
    Messages : 118
    Par défaut
    @adissa357
    Si vous avez bien compris l'algorithme, comment ça marche ? comment l’implémenter ? il vous sera d'une facilité évidente de modifier le code de sorte à ce que la méthode retourne String au lieu de StringBuffer.

    par ailleurs, les règles du forum interdisent de donner la réponse de manière directe mais il suffit que je vous ai donné l’implémentation.

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

Discussions similaires

  1. Mettre en majuscule certain caractère d'une chaîne
    Par saket2114 dans le forum Langage
    Réponses: 4
    Dernier message: 26/10/2009, 15h38
  2. CompareTo sur String avec des caractères numériques
    Par seb0634 dans le forum Langage
    Réponses: 2
    Dernier message: 06/02/2008, 10h35
  3. comment concatiner des strings avec des nombre
    Par Sara83 dans le forum MATLAB
    Réponses: 3
    Dernier message: 18/10/2006, 13h06
  4. Réponses: 2
    Dernier message: 09/03/2006, 14h15
  5. Mauvais tri des String avec des accents
    Par lbreuillard dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 23/09/2005, 12h21

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