Comment remplacer un espace réservé dans une chaîne avec un modèle SimpleDateFormat
Dans une Chaîne comme ceci
".../uploads/${customer}/${dateTime('yyyyMMdd')}/report.pdf"
J'ai besoin de remplacer un customer
et un yyyyMMdd
timestamp.
Pour remplacer le customer
espace réservé, je pourrais utiliser le StrSubstitutor
de Apache Commons. Mais comment remplacer le SimpleDateFormat
? Nous sommes en cours d'exécution, au Printemps de enviourment, alors peut-être Spring EL
est une option?
Le balisage pour les espaces réservés n'est pas fixe, c'est ok, si une autre bibliothèque de syntaxe change.
Ce petit tests montre le problème:
SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd");
String template = ".../uploads/${customer}/${dateTime('yyyyMMdd')}/report.pdf";
@Test
public void shouldResolvePlaceholder()
{
final Map<String, String> model = new HashMap<String, String>();
model.put("customer", "Mr. Foobar");
final String filledTemplate = StrSubstitutor.replace(this.template, model);
assertEquals(".../uploads/Mr. Foobar/" + this.formatter.format(new Date()) + "/report.pdf", filledTemplate);
}
source d'informationauteur d0x
Vous devez vous connecter pour publier un commentaire.
Pourquoi n'utilisez-vous pas
MessageFormat
à la place?Ou avec
String.format
Comme NilsH suggéré MessageFormat est vraiment agréable pour cette fin. D'avoir nommé les variables que vous pouvez masquer MessageFormat derrière votre classe:
Et vous devez ajuster votre cas de test:
J'ai enlevé les génériques et les remplacer par celles de la Chaîne. Aussi
isPlaceholder
etgetPlaceholderValue
est codé en dur et attendre ${valeur} syntaxe.Mais c'est juste l'idée pour résoudre votre problème. Pour ce faire pouvez utiliser les méthodes de
StrSubstitutor
(utilisez est ou faireFormattedStrSubstitutor extends StrSubstitutor
).Aussi, vous pouvez utiliser par exemple $d{valeur} pour le formatage de la date et de $foo{valeur} pour les foo mise en forme.
Mise à JOUR
Ne pouvait pas dormir sans solution complète. Vous pouvez ajouter cette méthode pour
FormattedStrSubstitutor
classe:Votre cas de test, c'est comme dans votre question (de petits changements dans l'espace réservé):
Même limite comme avant; pas de génériques et de fixer le préfixe et le suffixe de l'espace réservé.
Semble que c'est aussi simple que cela?