So ersetzen Sie einen Platzhalter in einem String durch ein SimpleDateFormat-Muster

8

In einem gegebenen String wie diesem

%Vor%

Ich muss einen customer und einen yyyyMMdd Zeitstempel ersetzen.

Um den Platzhalter customer zu ersetzen, könnte ich StrSubstitutor von Apache Commons verwenden. Aber wie ersetzt man SimpleDateFormat ? Wir laufen in einer Spring Environment, also ist Spring EL eine Option?

Das Markup für die Platzhalter ist nicht festgelegt, es ist in Ordnung, wenn eine andere Bibliothek syntaktische Änderungen benötigt.

Dieser kleine Test zeigt das Problem:

%Vor%     
d0x 08.05.2013, 08:33
quelle

2 Antworten

24

Warum verwenden Sie nicht stattdessen MessageFormat ?

%Vor%

Oder mit String.format

%Vor%     
NilsH 08.05.2013 08:45
quelle
8

Wie NilsH vorgeschlagen hat, ist MessageFormat für diesen Zweck wirklich nett. Um benannte Variablen zu haben, können Sie MessageFormat hinter Ihrer Klasse verbergen:

%Vor%

Und Sie müssen Ihren Testfall anpassen:

%Vor%

Ich habe Generika entfernt und diese durch String ersetzt. Auch isPlaceholder und getPlaceholderValue sind fest codiert und erwarten $ {value} Syntax.

Aber das ist nur die Idee, um Ihr Problem zu lösen. Verwenden Sie dazu die Methoden von StrSubstitutor (verwenden Sie einfach is oder make FormattedStrSubstitutor extends StrSubstitutor ).

Sie können zum Beispiel auch $ d {Wert} für die Datumsformatierung und $ foo {Wert} für die Formatierung von foo verwenden.

AKTUALISIEREN

Konnte nicht schlafen ohne vollständige Lösung. Sie können diese Methode zu FormattedStrSubstitutor class hinzufügen:

%Vor%

Ihr Testfall ist wie in Ihrer Frage (kleine Änderungen im Platzhalter):

%Vor%

Gleiche Einschränkung wie zuvor; keine Generika und Fix Präfix und Suffix für Platzhalter.

    
Walery Strauch 08.05.2013 13:54
quelle

Tags und Links