Skip to content

How can i format the content of the mail by using MessageFormat in java

I have an automatic mail content that I want to send in java. I want to format it in java using MessageFormat.

Here is the content of the mail containing three parameters to customize.

Bonjour,

Nous vous confirmons la reception du {0}$ correspondant à l'achat de votre
{1} correspondant au forunisseur {3}

Si cela vous convient, nous vous enverrons la facture detaille avec toute les justificatifs
et le detail des commandes

Nous restons à votre entière disposition pour toute informations complementaires

A très bientôt.

Ceci est un message automatique , merci de ne pas repondre à ce mail.

These parameters will be retrieved in an array and will be inserted in the content of the mail

String[] data = new String[] {"15","p1","Tera"};
String montant = data[0];
String produit = data[1];
String fournisseur = data[2];
String message = "Bonjour, ..."; //The content of the mail above
MessageFormat mf = new MessageFormat(message);
System.out.println(mf);

I want to display the message as in the content of the mail and how to pass my three string variables instead of {0}, {1} and {2}. How can I do this in java ?

Answer

You can do:

String message = "Bonjour, ..."
MessageFormat mf = new MessageFormat(message); 
String formattedStr = mf.format(new Object[]{"15", "p1", "Tera"});

Note – single quote ' should be escaped by doubling the single quote: ''.

Unescaped quote:

String msg = "Bonjour,n" +
        "{0}$ correspondant à l'achat de votre {1} correspondant au forunisseur {2}n";
MessageFormat mf = new MessageFormat(msg);
String formattedStr = mf.format(new Object[]{"15", "p1", "Tera"});
System.out.println(formattedStr);

Incorrect output:

Bonjour,
15$ correspondant à lachat de votre {1} correspondant au forunisseur {2}

Not what we wanted…

To fix it, we should escape the quote l'achat –> l''achat:

String msg = "Bonjour,n" +
        "{0}$ correspondant à l''achat de votre {1} correspondant au forunisseur {2}n";
MessageFormat mf = new MessageFormat(msg);
String formattedStr = mf.format(new Object[]{"15", "p1", "Tera"});
System.out.println(formattedStr);

Correct output:

Bonjour,
15$ correspondant à l'achat de votre p1 correspondant au forunisseur Tera