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

avec Java Discussion :

Répéter un motif dans une chaine de caractères


Sujet :

avec Java

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Répéter un motif dans une chaine de caractères
    Bonjour,

    Je suis débutant en JAVA et malgré tous les tuto il y a un truc que je n'arrive pas à faire ;

    Il s'agit d'étendre un string(sans mauvais jeu de mots) en fonction du nombre qui précède, par exemple a4b fait aaaab, ab5c fait abccccc etc.. et de même pour les nombres genre a12b fait 12a puis un b.
    Voila en gros ce que j'ai essayé

    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
    public class HelloWorld
    {
        public static void main(String[] args)
        {
            String res="";
            int out;
            String s="ab3c";
            int x=5;
     
            for (int i = 0 ; i < s.length() ;i++){
                out=i+1;
                if (s.charAt(out) instanceof int) {
                    for (int j=0; j<out; j++){
                        res+=s.charAt(i);
                    }
                }
            }
            System.out.print(res);
        }
    }
    Mais ça ne marche pas peu importe ce que je fais ça ne marche pas, si quelqu'un a une idée ça m'aiderait beaucoup.. Avec explications de préférence si vous utilisez des trucs plus poussés !

  2. #2
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Bonjour,

    Il y a un élément crucial que tu dois obligatoirement savoir lorsque tu commences à étudier le Java (très sérieusement).
    La classe String est immuable, c'est-à-dire stricto-sensus, dès lors que tu as instancié (et initialisé) un objet de la classe String sa valeur ne peux plus être modifiée.

    C'est pour cela que quoi que tu fasses comme tu dis cela ne marche pas.
    Je t'invite fortement à lire (ou relire) la section d'un bon ouvrage Java traitant de la classe String, et tu comprendras pourquoi cela ne marche pas comme tu faisais et comment y remédier.

    Je te laisse chercher.
    Transact.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2021
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2021
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Salut, En gros je ne peux pas modifier un string je peux juste y ajouter des valeurs ? J'ai essayé de compenser ça avec une regex pour ne pas avoir à modifier le string avec ça

    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
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
    public class HelloWorld
    {
        public static void main(String[] args)
        {
            String res="";
            int out;
            Pattern p = Pattern.compile("[0-9]");
            String s="ab3c";
            int x=5;
            for (int i = 0 ; i < s.length() ;i++){
                Matcher m = p.matcher(s.charAt(out));
                out=i+1;
                if (m.matches()) {
                    for (int j=0; j<s.charAt(out); j++){
                        res+=s.charAt(i);
                    }
                }
                System.out.print(res);
            }
        }
    }
    Mais il y a encore plus d'erreurs, je pense que je vais juste recommencer à 0, tu aurais un indice de la méthode stp ?

  4. #4
    Membre confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2013
    Messages
    343
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2013
    Messages : 343
    Points : 536
    Points
    536
    Billets dans le blog
    2
    Par défaut Une pince à linge de chaque côté
    Pour étendre un string, mettre une forte pince à linge aux deux extrémités


  5. #5
    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
    Hello,

    pour regarder si quelque chose que tu trouves dans une String est un nombre, contente-toi de vérifier si c'est entre '0' et '9' -_-°.

    Pas de instanceof. Pas de matcher.

    (Une regex pourrait être une manière de résoudre le problème, mais tu es trop embrouillé pour l'instant.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Bonjour,

    pour regarder si quelque chose que tu trouves dans une String est un nombre, contente-toi de vérifier si c'est entre '0' et '9' -_-°.
    C'est une très bonne méthode parmi tant d'autre, par contre la "problèmatique" que va rencontrer notre "jeune padawan Java" est de savoir qu'il devra utiliser la table ASCII des caractères.

    Sinon, tu peux aussi utiliser la méthode isDigit(char ch) de la classe Character, à utiliser dans une boucle parcourant ta chaîne de caractères pour vérifier si le caractère est un nombre.

    Sans conteste, tu devrais voir (ou revoir) tes fondamentaux sur la programmation Java.

    Transact.

  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
    Citation Envoyé par transact Voir le message
    C'est une très bonne méthode parmi tant d'autre, par contre la "problèmatique" que va rencontrer notre "jeune padawan Java" est de savoir qu'il devra utiliser la table ASCII des caractères.
    Euh, non. Entre '0' et '9'. Voilà, fini. Pas eu besoin de s'intéresser à ASCII.

    Certes, derrière ça fonctionne sur la base de la table ASCII, mais on a pas eu besoin de le savoir.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Euh, non. Entre '0' et '9'. Voilà, fini. Pas eu besoin de s'intéresser à ASCII.
    Ah si j'insiste! , il devra récupérer la table ASCII des caractères pour effectuer la démarche algorithmique suivante :

    Créer une boucle pour parcourir tous les caractères de la chaîne de caractères pour savoir si on a un chiffre.
    Si le caractère positionné à l'indice i que je parcours dans ma chaîne de caractère est un caractère compris entre 48 et 57 (valeurs décimales) inclus alors
    j'effectue un traitement ....

    Transact.

  9. #9
    Membre éprouvé
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2009
    Messages : 552
    Points : 1 060
    Points
    1 060
    Par défaut
    Bonsoir,

    Pas vraiment d'accord avec le dernier message :

    • Le travail "char" par "char" sur les chaînes java amène des sacrés surprises quand on tombe sur des caractères dépassant la limite UTF-16 de l'encodage des "char" (et même dans des textes en français, on n'est pas l'abri d'horreur du type "..." sur un seul caractère et autres joyeusetés du type smiley)
    • Il faut lire codePoint par codePoint pour être robuste. et ça tombe plutôt bien dans la mesure où il y a pas mal d'outil autour des "codePoint" en java (dont "est-ce que ce codePoint correspondant à un chiffre")
    • Quand on parse des chaînes de caractères sans s'appuyer sur des outils existants, il est possible de streamer facilement la lecture des différents "token" dès lors que l'on peut récupérer le caractère courant, passer au suivant et tester s'il reste des caractères à lire.


    Pour illustrer les deux premiers points et principales opérations sur les "codePoint", voici un exemple de lecture "codePoint" par "codePoint" sur une chaîne contenant un smiley (https://www.compart.com/en/unicode/U+1F60D) avec affichage d'information sur le type de caractère (entier ou non) :

    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
     
    public class DemoCodePoint {
     
    	public static void main(String[] args) {
                    // 3 suivi d'un seul caractère unicode pour le smiley
                    // NB : s.length() == 3, mais s contient 2 caractères unicode
                    String s = "3\uD83D\uDE0D";
    		Iterator<Integer> it = s.codePoints().iterator();
    		while (it.hasNext()) {
    			Integer codePoint = it.next();
                            // NB : Classe utile pour construire progressivement une chaîne de caractères
    			StringBuilder line = new StringBuilder();
    			// Conversion codePoint en chaîne de caractères (char[])
    			line.append(Character.toChars(codePoint));
    			// Test et indique si le caractère est un chiffre
    			if (Character.isDigit(codePoint)) {
    				line.append(" est un chiffre");
    			} else {
    				line.append(" n'est pas un chiffre");
    			}
    			System.out.println(line.toString());
    		}
    	}
     
    }
    Pour illustrer le dernier point, il peut être pratique de se faire sa propre classe "CodePointIterator" pour combler l'absence de "current" avec l'itérateur standard renvoyé par s.codePoints().iterator() ("next" seul posant problème pour tester un caractère sans avancer dans la lecture de la chaîne de caractère) :

    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
     
    public class CodePointIterator {
    	/**
             * Chaîne en entrée
             */
    	private String s;
    	/**
             * Longueur de la chaîne
             */
    	private int length;
    	/**
             * Position courrante
             */
    	private int offset;
     
    	public CodePointIterator(String s) {
    		this.s = s;
    		this.length = s.length();
    		this.offset = 0;
    	}
     
    	public boolean hasNext() {
    		return offset < length;
    	}
     
    	public int next() {
    		int codePoint = s.codePointAt(offset);
                    // NB : il peut y avoir plusieurs "char" pour un seul caractère unicode dans la String.
    		offset += Character.charCount(codePoint);
    		return codePoint;
    	}
     
    	public int current() {
    		return s.codePointAt(offset);
    	}
     
    }
    Partant de là, on arrive assez facilement à décomposer le problème initial en faisant ce genre de chose :

    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
     
    // expand("a12dc") : "addddddddddddc"
    public static String expand(String s) {
    	if (s == null || s.isEmpty()) {
    		return s;
    	}
    	StringBuilder result = new StringBuilder();
    	CodePointIterator it = new CodePointIterator(s);
     
    	// nombre de répétition du caractère
    	int count = 1;
    	while (it.hasNext()) {
    		int codePoint = it.current();
                    if (Character.isDigit(codePoint)) {
                            // sachant que l'on est sur un chiffre, on lit l'entier correspondant
                            // NB : sans le current, on serait obligé de remonter dans la lecture de la chaîne
    			count = readInteger(it);
    		} else {
                            // si ce n'est pas un chiffre, on répète n fois le caractères correspondant au codePoint dans une chaine
                            // (ajout count fois de Character.toChars(codePoint) dans un buffer)
    			result.append(repeat(codePoint, count));
    			count = 1;
    			it.next();
    		}
    	}
    	return result.toString();
    }
    L'algorithme "readInteger" devient trivial avec cet itérateur en entrée : Tant qu'il reste des caractères à lire et que je suis sur un chiffre, je met le chiffre dans un buffer (StringBuilder). Je convertis le buffer en entier à la fin.

    Aussi, quand on doit parser des choses plus compliquées (formats métiers par exemple), ce principe donne un cadre pour tester et réutiliser les différents parseurs élémentaires.

    Cordialement

  10. #10
    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
    Citation Envoyé par transact Voir le message
    Ah si j'insiste!
    C'est un peu dommage, puisque j'ai déjà démontré que tu avais tort.

    Non, il n'y a pas besoin de se soucier d'ASCII, pour les raisons déjà montrées. Ce que tu dis est faux, comme déjà prouvé. Qu'est-ce que tu ne comprends pas ?

    Citation Envoyé par bretus Voir le message
    quand on tombe sur des caractères dépassant la limite UTF-16 de l'encodage des "char"
    Holà, n'allons pas trop vite.

    Tout cela est vrai, certes, mais on parle à une personne qui n'est déjà pas arrivée à faire ça toute seule rien qu'en utilisant les lettres de l'alphabet. Un problème d'une incroyable trivialité, dédié aux purs débutants.

    Et toi tu voudrais qu'elle pense dès le départ à gérer l'unicode, en utilisant des code points, des ints, des streams, des iterators au lieu d'un simple charAt() avec des chars clairement typés ? Ca me semble exagérément ambitieux.

    Mais c'est sympa à considérer pour qui n'est plus débutant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Pour répondre à Thelvin, si on a une chaîne de caractère comme par exemple ab5c.

    Comment peux-tu savoir que cette chaîne contient un chiffre si tu ne parcours pas chaque caractère de la chaîne avec un charAt() dans une boucle ?

    Et pour savoir si le caractère est un chiffre, il faut connaître la valeur ASCII de chaque caractère de la chaîne ?!

  12. #12
    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
    Citation Envoyé par transact Voir le message
    Comment peux-tu savoir que cette chaîne contient un chiffre si tu ne parcours pas chaque caractère de la chaîne avec un charAt() dans une boucle ?
    On ne peut pas. Enfin, on peut faire une regex mais bon.

    Citation Envoyé par transact Voir le message
    Et pour savoir si le caractère est un chiffre, il faut connaître la valeur ASCII de chaque caractère de la chaîne ?!
    En imaginant que Java ne fournisse pas déjà une méthode qui fasse ça, voici une méthode qui vérifie si un caractère est un chiffre de 0 à 9, sans que j'aie eu besoin de me soucier de connaître quoi que ce soit d'ASCII :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public static boolean isDecimalDigit(char c) {
      return c >= '0' && c <= '9';
    }
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre éprouvé
    Avatar de Rony Rauzduel
    Homme Profil pro
    En formation Architecte logiciel
    Inscrit en
    Décembre 2008
    Messages
    630
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : En formation Architecte logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2008
    Messages : 630
    Points : 1 029
    Points
    1 029
    Par défaut
    Oui effectivement on peut procéder ainsi, cela revient à créer une méthode utilitaire (si comme tu dis elle n'existe pas déjà dans l'API du JDK) pour vérifier si le caractère est un chiffre.

  14. #14
    Futur Membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par Fentes Voir le message
    Bonjour,

    Je suis débutant en JAVA et malgré tous les tuto il y a un truc que je n'arrive pas à faire ;

    Il s'agit d'étendre un string(sans mauvais jeu de mots) en fonction du nombre qui précède, par exemple a4b fait aaaab, ab5c fait abccccc etc.. et de même pour les nombres genre a12b fait 12a puis un b.
    Voila en gros ce que j'ai essayé

    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
    public class HelloWorld
    {
        public static void main(String[] args)
        {
            String res="";
            int out;
            String s="ab3c";
            int x=5;
     
            for (int i = 0 ; i < s.length() ;i++){
                out=i+1;
                if (s.charAt(out) instanceof int) {
                    for (int j=0; j<out; j++){
                        res+=s.charAt(i);
                    }
                }
            }
            System.out.print(res);
        }
    }
    Mais ça ne marche pas peu importe ce que je fais ça ne marche pas, si quelqu'un a une idée ça m'aiderait beaucoup.. Avec explications de préférence si vous utilisez des trucs plus poussés !
    Moi aussi je suis débutante, alors j'ai cherché et j'ai trouvé ca :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    package exos.pour.entrainement;
     
    public class HelloWorld {
     
    	//Extraire le nombre de la chaine	
    	public static String extraireNbre (final String s1)
    	{
     
    		StringBuilder sb2 = new StringBuilder();
    		boolean nbrTrouve = false;
     
    		for (char nbr : s1.toCharArray())
    		{
    			if (Character.isDigit(nbr))
    			{
    				sb2.append(nbr);
    				nbrTrouve = true;
    			} else if (nbrTrouve) {break;}
    		}
    		return sb2.toString();
    	}
    	//concaténer un String
    	public static String concatNbre (int nb, String str)
    	{
    		for (int i = 0; i<nb; i++)
    		{
    			System.out.print(str);
    		}
    		return str;
    	}
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
     
    		String s = "a4bc";
    		StringBuilder sb = new StringBuilder(s);
     
    		//extraire le nombre
    		String s1 = extraireNbre (s);
    		System.out.println(s1);
     
    		//rechercher la position du 4
    		int position = s.indexOf(s1);
    		System.out.println(position);
     
    		//"transformer le String 4 en nombre
    		int nbre = Integer.parseInt(s1);
    		System.out.println(nbre);
     
    		//rechercher le char à concaténer qui se trouve avant le nombre
    		char c = s.charAt(position-1);
    		System.out.println(c);
    		String s2 = Character.toString(c); //"transformer le char en string pour pouvoir le concaténer après avec ma fonction concatNbre
     
    		String s3 = concatNbre(nbre-1, s2); //j'ai enlevé 1 car sinon ca faisait 5 a au lieu de 4
     
    		//remplacer les 2 premiers char par la chaine concaténée
    		sb.replace(position-1,position+1, s3);
    		System.out.println(sb);
     
     
     
    	}
    }
    ce qui donne : "aaaabc". J'ai pas cherché plus, j'ai pas cherché à modifier la chaine ni rien, mais je te laisse tester. Etant débutante, j'ai pas cherché à savoir si ce code prend beaucoup de place ni rien, mais j'ai juste essayé de comprendre le fonctionnement, car je ne m'y connais pas trop ^^
    Pour la fonction extraire nombre je l'ai trouvé sur internet et j'ai essayé d'en comprendre le fonctionnement. Je t'invite à faire de même en testant plusieurs trucs.
    Je sais pas du tout si j'ai bon, mais voilà je me suis amusée à m'entrainer et surtout apprendre comment ca fonctionne tout ca.

  15. #15
    Futur Membre du Club
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2020
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juin 2020
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par BettyBlu3 Voir le message
    Moi aussi je suis débutante, alors j'ai cherché et j'ai trouvé ca :

    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
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    package exos.pour.entrainement;
     
    public class HelloWorld {
     
    	//Extraire le nombre de la chaine	
    	public static String extraireNbre (final String s1)
    	{
     
    		StringBuilder sb2 = new StringBuilder();
    		boolean nbrTrouve = false;
     
    		for (char nbr : s1.toCharArray())
    		{
    			if (Character.isDigit(nbr))
    			{
    				sb2.append(nbr);
    				nbrTrouve = true;
    			} else if (nbrTrouve) {break;}
    		}
    		return sb2.toString();
    	}
    	//concaténer un String
    	public static String concatNbre (int nb, String str)
    	{
    		for (int i = 0; i<nb; i++)
    		{
    			System.out.print(str);
    		}
    		return str;
    	}
     
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
     
     
    		String s = "a4bc";
    		StringBuilder sb = new StringBuilder(s);
     
    		//extraire le nombre
    		String s1 = extraireNbre (s);
    		System.out.println(s1);
     
    		//rechercher la position du 4
    		int position = s.indexOf(s1);
    		System.out.println(position);
     
    		//"transformer le String 4 en nombre
    		int nbre = Integer.parseInt(s1);
    		System.out.println(nbre);
     
    		//rechercher le char à concaténer qui se trouve avant le nombre
    		char c = s.charAt(position-1);
    		System.out.println(c);
    		String s2 = Character.toString(c); //"transformer le char en string pour pouvoir le concaténer après avec ma fonction concatNbre
     
    		String s3 = concatNbre(nbre-1, s2); //j'ai enlevé 1 car sinon ca faisait 5 a au lieu de 4
     
    		//remplacer les 2 premiers char par la chaine concaténée
    		sb.replace(position-1,position+1, s3);
    		System.out.println(sb);
     
     
     
    	}
    }
    ce qui donne : "aaaabc". J'ai pas cherché plus, j'ai pas cherché à modifier la chaine ni rien, mais je te laisse tester. Etant débutante, j'ai pas cherché à savoir si ce code prend beaucoup de place ni rien, mais j'ai juste essayé de comprendre le fonctionnement, car je ne m'y connais pas trop ^^
    Pour la fonction extraire nombre je l'ai trouvé sur internet et j'ai essayé d'en comprendre le fonctionnement. Je t'invite à faire de même en testant plusieurs trucs.
    Je sais pas du tout si j'ai bon, mais voilà je me suis amusée à m'entrainer et surtout apprendre comment ca fonctionne tout ca.
    Bon laisse tomber ca marche pas. Je vais plancher dessus cet aprem XD

Discussions similaires

  1. Réponses: 9
    Dernier message: 23/12/2013, 16h40
  2. Réponses: 7
    Dernier message: 17/09/2005, 23h38
  3. Récuperer un nombre dans une chaine de caractère
    Par ColonelHati dans le forum C
    Réponses: 4
    Dernier message: 27/04/2005, 14h50
  4. [VB.NET] Recherche dans une chaine de caractères
    Par Pleymo dans le forum Windows Forms
    Réponses: 12
    Dernier message: 09/04/2005, 10h25
  5. [C#] Une variable dans une chaine de caractères...
    Par GlorfindelHebril dans le forum Windows Forms
    Réponses: 9
    Dernier message: 31/03/2005, 14h30

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