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 :

Fonction Expand Number.


Sujet :

avec Java

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2015
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 43
    Points : 17
    Points
    17
    Par défaut Fonction Expand Number.
    Salut à tous.

    Sujet : Créer une fonction qui lit une chaîne de caractère de type xxxNxxx avec N un nombre qui indique qu'on va copier, dans la chaîne, N-1 le caractère qui précède ce nombre.

    Ma solution :
    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
        public static String expandNumber(String input){
            /*Recherche du nombre*/
            int deb = 0, fin = 0, i=0, exp = 1, dim = input.length();
            ArrayList<Integer> nb = new ArrayList<Integer>();
            while((i < dim-1)){
     
                if((isInteger(input.substring(i,i+1)))&&(deb == 0)){
                    fin = deb = i;
                    nb.add(Integer.parseInt(input.substring(i,i+1)));
                }
     
                if((isInteger(input.substring(i,i+1)))&&(deb == 1)){
                    fin = i;
                    nb.add(Integer.parseInt(input.substring(i,i+1)));
                }
     
                i++;
            }
     
            if(i == dim-2){return "LOL y'a pas de nombre dans la chaine";}
     
     
            else{
     
            /*Couper autour du nombre*/
            String begin = new String(input.substring(0,deb-1));
            String end = new String(input.substring(fin+1,dim));
     
            /*Traitement*/
            int dim_nb = nb.size(); 
            int repet = nb.get(dim_nb -1);
     
            for (i = dim_nb-2 ; i > - 1; i--){
                repet = nb.get(i)*puiss(10,exp);
                exp+=1;
            } 
     
            String lol = input.substring(deb-1,deb);
            i=0;
            String temp = lol;
            while(i<repet-1){
                temp = temp.concat(lol);
                i+=1;
            }
     
            return begin.concat(temp).concat(end);
            }
        }
    Question : Je suis débutant en programmation objet, pouvez vous me donner des méthodes orientées objet pour améliorer ma solution ?

    Remarque : Ma solution ne marche pas si je met un nombre à la première place, je remarque, je vais modifier ça .

  2. #2
    Membre expert

    Avatar de Songbird
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Juin 2015
    Messages
    493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2015
    Messages : 493
    Points : 3 872
    Points
    3 872
    Billets dans le blog
    8
    Par défaut
    Salut,

    Jette un œil du côté du recyclage de code sur le net, tu devrais trouver ton bonheur si tu souhaites rendre certaines parties de ta méthode réutilisable ailleurs.
    Avant de poster: FAQ Rust; FAQ Dart; FAQ Java; FAQ JavaFX.
    Vous souhaiteriez vous introduire au langage Rust ? C'est par ici ou ici !
    Une question à propos du langage ? N'hésitez pas à vous rendre sur le forum !


    Pour contribuer à la rubrique, vous pouvez me contacter par MP (Sorry, we're closed!) ou contacter directement la rédaction.

  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 : 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,

    Je ne suis pas tout à fair sûr de comprendre ce que tu veux faire, mais si le but est de remplacer dans une chaîne, tout occurance d'un nombre pas ce nombre incrémenté de 1, on peut utiliser les expressions régulières comme ç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
    24
    25
    public static void main(String[] args) {
     
    		System.out.println(incNumberInString("abc123def"));
    		System.out.println(incNumberInString("a1b2c3d4"));
    		System.out.println(incNumberInString("123abc"));
    		System.out.println(incNumberInString("abc123"));
     
    	}
     
    	private static final Pattern NUMBER_MATCH = Pattern.compile("\\d+");
    	public static String incNumberInString(String s) {
     
    		final Matcher matcher = NUMBER_MATCH.matcher(s);
     
    		StringBuffer sb = new StringBuffer();
     
    		while(matcher.find()) {
    			matcher.appendReplacement(sb, String.valueOf(Integer.parseInt(matcher.group())+1));
    		}
     
    		matcher.appendTail(sb);
     
    		return sb.toString();
     
    	}
    Ce qui donne :
    abc124def
    a2b3c4d5
    124abc
    abc124
    PS : avec "(?<![.,\\d])\\d+(?![.,\\d])" comme pattern, les nombres décimaux (avec . ou ,) seront exclus
    Entrée :
    abc123,5def
    a1b2c3d4
    123.5abc
    abc123
    Sortie :
    abc123,5def
    a2b3c4d5
    123.5abc
    abc124
    Et si tu ne dois utiliser d'expression régulière, et ne remplacer que un seul nombre dans une chaine, ce que semble faire ton code d'après une lecture rapide, on pourra faire plus simplement, comme ç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
     
    	public static String incNumberInString(String s) {
     
    		int debut=0;
    		for(;debut<s.length()&&!Character.isDigit(s.charAt(debut));debut++);
    		if ( debut<s.length() ) {
    			int fin=debut;
    			for(;fin<s.length()&&Character.isDigit(s.charAt(fin));fin++);
    			StringBuilder sb = new StringBuilder(s.substring(0,debut));
    			sb.append(Integer.parseInt(s.substring(debut,fin))+1);
    			sb.append(s.substring(fin));
    			return sb.toString();
    		}
    		else {
    			return s;
    		}
     
    	}
    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.

Discussions similaires

  1. Fonction to number
    Par mazbap dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/05/2010, 11h19
  2. fonctions expand/collapse pour tableaux
    Par destructive dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 25/04/2007, 10h43
  3. fonction expand() : attribuer un onClick
    Par pc.bertineau dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 23/03/2007, 10h26
  4. [XSLT] utilisation de la fonction format-number
    Par edogawa dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 23/02/2007, 12h15
  5. [classe ou fonction] fonction magic number ?
    Par Leinad dans le forum Langage
    Réponses: 13
    Dernier message: 28/07/2006, 17h58

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