Replace en masse

Replace en masse - Java - Programmation

Marsh Posté le 24-11-2022 à 15:20:24    

Yo
J'ai:
String listeParametre="Pierrot|vache|rouge";
String resultat="Bonjour $, la $ est $";

 
Comment faire pour avoir :
resultat="Bonjour Pierrot, la vache est rouge"
 
En gros, j'ai x éléments séparés par un pipe dans listeParametre que je dois mettre dans l'ordre à la place des $ dans resultat
Il faut que cela fonctionne bien sûr avec des $ en début et fin de chaine. Le nombre de $ n'est pas connu. Par contre je suis sûr d'avoir exactement le même nombre de $ que de paramètres.
J'ai fait un truc avec des split et des boucles mais j'ai l'intuition qu'il y a un truc beaucoup plus simple [:transparency]

Reply

Marsh Posté le 24-11-2022 à 15:20:24   

Reply

Marsh Posté le 25-11-2022 à 12:44:31    

Bonjour,  
Si tu veux qu'on t'aide tu dois commencer par poster ce que toi tu as fait et pas juste l'énoncé (cf les règles de la section). Surtout que là ça sent énormément le devoir scolaire.


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Marsh Posté le 25-11-2022 à 14:32:53    

Je suis arrivé sur le forum en 2004 et je bossais depuis quelques années déjà, je n'ai plus fait de devoirs scolaires depuis plusieurs années maintenant :-)
J'ai simplifié le cas à l’extrême pour ne laisser que l'idée sur laquelle je me pose des questions mais l'algo est plus complexe. J'ai également modifié les données pour que cela soit le plus simple possible (en réalité ce sont notamment des articles de lois).
Je me dis qu'il y a peut être une autre solution que de spliter puis de recoller, en utilisant des regex peut-être ...?

Reply

Marsh Posté le 25-11-2022 à 15:50:11    

Le split | pour ton entrée de valeur à remplacer, pas sur qu'on puisse faire mieux...
Par contre il doit y avoir une fonction qui prend des tableaux pour les remplacements, mais désolé je ne connais pas Java ! ^^
https://www.google.com/search?q=jav [...] lace+array
Un truc du genre : http://www.java2s.com/example/java [...] 22fee.html ?


---------------
D3
Reply

Marsh Posté le 25-11-2022 à 16:23:54    

Une implémentation naïve semble bien fonctionner, je vois pas trop comment ça pourrait être beaucoup plus simple.

Code :
  1. var params = "Pierrot|vache|rouge".split("\\|" );
  2. var template = "Bonjour $, la $ est $".split("\\$" );
  3. assert(params.length == template.length);
  4. var out = new StringBuilder();
  5. for (int i = 0; i < params.length; i++) {
  6.     out.append(template[i]);
  7.     out.append(params[i]);
  8. }
  9. return out.toString();
 

Si tu veux une solution plus robuste, il manque pas de bibliothèques qui font de l'interpolation ou du templating de chaînes dans le monde Java.


Message édité par DDT le 25-11-2022 à 16:29:25

---------------
click clack clunka thunk
Reply

Marsh Posté le 25-11-2022 à 17:19:45    

Merci , je vais probablement utiliser le public static String replaceAll(String src, String[] replace, String[] by)
 :jap:

Reply

Marsh Posté le 25-11-2022 à 17:58:26    

Tu vas devoir générer un tableau de $ de la même taille que ton nombre de substitution, et à chaque itération le machin va recréer une chaîne pour rien.  
Je ne sais pas comment sont gérées en mémoire les mutations de chaînes en java, mais la solution de DDT me parait plus propre...


---------------
Réalisation amplis classe D / T      Topic .Net - C# @ Prog
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed