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 :

Ajouter un chaine à tous les "élements" d'une autre chaine


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut Ajouter un chaine à tous les "élements" d'une autre chaine
    Bonjour

    Partant d'un String "a;b;c" comment obtenir "direct:a;direct:b;direct:c" en 1 seule ligne de code svp ?

    Je sais le faire dans une fonction en splittant le String, en bouclant sur tous les éléments pour leur ajouter "direct:" puis en concaténant dans le String de résultat, mais j'ai besoin de le faire en 1 seule ligne svp.

    Merci bcp
    Loko

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 586
    Par défaut
    Hello,

    ma foi, c'est effectivement faisable avec replaceAll(), mais ça demande une compréhension assez velue des regex et des groupes de capture.

    Exemple, supposons que j'ai une String a-b-c et que je veuille mettre chaque champ entre crochets pour faire [a]-[b]-[c]. Je peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s = "a-b-c";
    s = s.replaceAll("(.+?)(-|$)", "[$1]$2");
    le premier paramètre est une regex.

    .+? signifie "accepter tous les caractères jusqu'à ce qu'on tombe sur la suite"
    La suite c'est -|$ ce qui veut dire, soit un tiret - soit on arrive à la fin de la chaîne.

    Donc la regex reconnaît tout ce qui est avant un tiret, et tout ce qui est à la fin de la chaîne après le dernier tiret.

    Le deuxième paramètre définit par quoi on remplace ce qui a été reconnu par la regex.
    $1 indique "contenu entre les premières parenthèses" et $2 "contenu entre les deuxièmes parenthèses".
    Donc $1 c'est ce qui est séparé par des tirets, et ce qu'on veut mettre entre crochets, d'où [$1].
    Et $2 c'est le tiret lui-même, ou la fin de la chaîne (donc en termes de remplacement, rien,) si on est après le dernier tiret.

    A noter que pour la regex de départ la notion "accepter tous les caractères jusqu'à ce qu'on tombe sur la suite", je l'ai notée .+? alors qu'on aurait pu aussi bien noter .*?
    La première signifie "n'importe quel caractère, au moins une fois" et la deuxième "n'importe quel caractère, zéro ou plus de fois".
    En réalité la deuxième ne fonctionne pas, car après avoir reconnu c à la fin, en avançant dans la String à remplacer on a aussi le droit de reconnaître "rien, et fin de chaîne". Ce qui aurait ajouté des crochets vides [] à la fin et qu'on ne veut pas.
    La première n'a pas ce problème puisqu'on n'accepte que les remplacements d'au moins un caractère et pas les riens.

    Edit :

    Pour ceux qui ont pas peur de la taille de la ligne, il y a aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    String s = "a-b-c";
    s = Arrays.stream(s.split("-")).map(f -> "[" + f + "]").collect(Collectors.joining("-"));
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    344
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juillet 2004
    Messages : 344
    Par défaut
    Je me doutais que les regex feraient le job, mais je ne les connais pas assez.

    Merci bcp pour la solution et les explications très claires
    Loko

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

Discussions similaires

  1. [MySQL] Récupérer tous les élements d'une table après GROUP BY
    Par Dargar dans le forum PHP & Base de données
    Réponses: 18
    Dernier message: 28/03/2017, 10h13
  2. Réponses: 1
    Dernier message: 14/06/2012, 00h27
  3. Réponses: 1
    Dernier message: 25/05/2011, 08h16
  4. [MooTools] Supprimer tous les élements ayant une classe pre définie
    Par SgtBor dans le forum Bibliothèques & Frameworks
    Réponses: 3
    Dernier message: 29/01/2011, 23h20
  5. requete ajout caractere sur tous les champs d'une table
    Par lorenzo74 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/06/2006, 14h34

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