我会建立一个代表模式的树形结构。对于你的榜样,它看起来像:
root
+ variable (title)
+ group
+ text (" (by ")
+ variable (artist)
+ group
+ text (" featuring ")
+ variable (feat)
+ text (")")
然后,当你评估对你的树的元数据,您在组级别存储组中的所有变量和子组是否进行评估,如果是使用文本。
你的树类看起来是这样的:
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();
for (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);
}
}
所有剩下要做的就是找出如何解析你的字符串创建树结构。
那么你真正想要的是标记,而不是格式?对于格式化,请阅读Javadoc以获取String.format()。 – Axel 2013-04-05 06:59:01