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 :

Insérer un espace dans 3 caractères dans une chaîne de caractère


Sujet :

avec Java

  1. #1
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut Insérer un espace dans 3 caractères dans une chaîne de caractère
    Bonjour, vous allez trouver ça facile. mais je cherche depuis un bon moment comment insérer un espace après 3 caractères. je me doute qu'il existe une expression régulière mais je n'arrive pas à tomber dessus alors j'ai essayer ce petit code qui marche, mais s'il existe une expression régulière je suis prenneur. merci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public class essaiSpace {
    	public static void main(String[] args) {
    		String str = "123 4567";<----- la j'ai ma chaine de caractère
    		System.out.println(str);
    		str = str.replaceAll("( ){1,}", "");<---- là je rétire l'espace avec un regex
    		System.out.println(str);
    		String str1 = str.substring(0, 3
    		String str2 = str.substring(3, 7);
    		System.out.println(str1+" "+str2););<---- là je voudrais remettre mon espace avec un autre regex au lieu d'utiliser 2 substring
    	}
     
    }

  2. #2
    Membre émérite
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Points : 2 582
    Points
    2 582
    Par défaut
    Il n'existe à ma connaissance pas d'expression régulière qui fasse la recherche et remplacement direct, du moins pas en java. Il n'y a que des expressions régulières de recherche. Ensuite, pour le remplacement, il faut utiliser des choses style Matcher.remplaceAll.

    Vois par exemple Les expression régulières avec l’API Regex de Java, Comment remplacer une sous-chaîne en la reportant dans la chaîne de remplacement ?.

    Pour les trucs plus élaborés, il faut coupler avec la méthode appendRemplacement, et tu trouveras un exemple complet au javadoc de cette méthode.

  3. #3
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Merci pour les liens, mais je n'ai pas trouvé mon bonheur

  4. #4
    Membre habitué Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Points : 131
    Points
    131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String str = "1234567";
    System.out.println(str);
    str = str.replaceAll("\\A(...)", "$1 ");
    System.out.println(str);
    Ça marche mais c'est spécialement inefficace ! Pourquoi pas les substring tout simplement ? Et si le but est de formater un nombre (séparateur de milliers) il faut compter par 3 mais à partir de la fin et les NumberFormat font ça très bien...

  5. #5
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    Merci à toi, je testes et je te dis ce qu'il en est. le substring n'est pas mal, mais il est assez long.

  6. #6
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    ça marche bien je l'avour mais je voudrais savoir lorsque tu me dis
    Ça marche mais c'est spécialement inefficace
    Que veux-tu dire?

  7. #7
    Membre habitué Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Points : 131
    Points
    131
    Par défaut
    L'expression rationnelle sert à rechercher un ou plusieurs motifs variables dans une chaîne : si tu connais la position de tes caractères, son utilisation est inutile et couteuse en temps ! L'expression "\A(...)" signifie "3 caractères quelconques au début de la chaîne : autant couper les 3 premiers caractères directement !

    Sur ma machine, le test de 10000 fois
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    String str = "1234567";
    for(int i = 0; i < N; i++) {
        String r = str.substring(0, 3) + " " + str.substring(3);
    }
    contre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Pattern pattern = Pattern.compile("\\A(...)");
    String str = "1234567";
    for(int i = 0; i < N; i++) {
        Matcher matcher = pattern.matcher(str);
        String r = matcher.replaceAll("$1 ");
    }
    au profiler montre 0,02 s pour le premier contre 0,11 s pour le second (même en sortant la compilation de l'expression rationnelle) !

    La question est : pourquoi veux-tu couper les 3 premiers caractères, pour afficher un nombre ?

  8. #8
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    parce que ce nombre représente un ID récupéré dans la base, parsé et réaffiché en tant que caractère composé de nombres mais qui respecte une expression régulière comme ceci ("^(\\d{3}) (\\d{4})$"). et l'inserve dans la base. Supprimer le l'espace au milieu, parser et inscrire dans la base comme ID.
    voilà

  9. #9
    Membre habitué Avatar de jean.2edi
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 106
    Points : 131
    Points
    131
    Par défaut
    Tu veux dire que c'est un nombre de 7 chiffres dans la base ? Pourquoi ne pas le récupérer comme nombre et pas comme chaine de caractères ? Tu peux utiliser la division entière et le modulo pour séparer la première partie de la seconde ?

  10. #10
    Membre habitué Avatar de cashmoney
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 298
    Points : 149
    Points
    149
    Par défaut
    une division entière et récupérer le modulo?? Comment n'y ai-je pas pensé. Pppfff, c'est vrai qu'à force de réfléchir sur de grande chose, c'est des petites qui les résolvent.
    Merci pour ton aide

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

Discussions similaires

  1. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  2. Extraire une chaîne de caractères d'une chaîne
    Par dj-julio dans le forum Excel
    Réponses: 13
    Dernier message: 21/09/2007, 11h05
  3. Réponses: 7
    Dernier message: 14/12/2005, 09h53
  4. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03
  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