tokenize - How to make string formatting mechanism in Java? -


i'm trying make string formatting mechanism, pretty looks winamp advanced title formatting.

i have 'variables' (or metadata fields) bound object properties, in form %varname%. so, example, %title% metadata field bound song title, 'conquest of paradise', %artist% metadata field bound song artist, 'vangelis', , %feat% metadata field bound featuring artists, 'english chamber choir'.

now want display song depending on given formatting, example:

%title%[ (by %artist%[ featuring %feat%])] 

square brackets mean don't display unless (all) metadata inside brackets set. nesting of square brackets should possible.
abovementioned formatting string says: display metadata field %title% and, if %artist% set (not empty string), display (by %artist%), if %feat% metadata field non-empty, display field also. in abovementioned example, become:

conquest of paradise (by vangelis featuring english chamber choir)

now how make such mechanism? start?

i guess have tokenize string , per 'section' search metadata tags?

i build tree structure represents pattern. example, like:

root  + variable (title)  + group     + text (" (by ")    + variable (artist)    + group      + text (" featuring ")      + variable (feat)    + text (")") 

then when evaluate meta data against tree, store @ group level whether variables , sub-groups in group evaluated, , if use text.

your tree classes like:

interface node { string evaluate(map<string, string> metadata); }  class group implements node  {   private final list<node> _children;    group(final list<node> children) { _children = children; }    @override   public string evaluate(final map<string, string> metadata)   {     final stringbuilder sb = new stringbuilder();      (final node node : _children)     {       final string subtext = node.evaluate(metadata);       if (subtext == null)         return null;       sb.append(subtext);     }     return sb.tostring();   } }  class text implements node  {   private final string _text;    text(final string text) { _text = text; }    @override   public string evaluate(final map<string, string> metadata)   {     return _text;   } }  class variable implements node  {   private final string _variable;    variable(final string variable) { _variable = variable; }    @override   public string evaluate(final map<string, string> metadata)   {     return metadata.get(_variable);   } } 

all that's left work out how parse string create tree structure.


Comments

Popular posts from this blog

monitor web browser programmatically in Android? -

Shrink a YouTube video to responsive width -

wpf - PdfWriter.GetInstance throws System.NullReferenceException -