[stringtemplate-interest] Problem with fixed-length customobjectrenderer
Rabea Gransberger
rgransberger at gmx.de
Thu Feb 26 03:20:12 PST 2009
Or something like this for variable length:
public class TestStringTemplate_FixedLength {
/** Renders a string by appending with spaces to get a minimal size
*/
public static class FixesLengthRenderer implements AttributeRenderer
{
private static final String FORMAT_NAME = "fixedLength";
public String toString(Object o) {
return o.toString();
}
private String doFormat(Object o, int length) {
final String s = o.toString();
if (s.length() == length) {
return s;
}
else if (s.length() > length) {
return s.substring(0, length);
}
else {
int toAdd = length - s.length();
return prepend(s, toAdd);
}
}
private String prepend(final String s, int toAdd) {
char[] c = new char[toAdd];
Arrays.fill(c, ' ');
StringBuilder b = new StringBuilder();
b.append(c);
b.append(s);
return b.toString();
}
public String toString(Object o, String formatName) {
if (formatName.startsWith(FORMAT_NAME)) {
final String strgLength =
formatName.substring(FORMAT_NAME
.length());
try {
int length =
Integer.parseInt(strgLength);
return doFormat(o, length);
}
catch (NumberFormatException e) {
e.printStackTrace();
return toString(o);
}
}
return toString(o);
}
}
public static void main(String[] args) {
StringTemplate st = new StringTemplate(
"$elems:{$it;format=\"fixedLength5\"$ foo};
separator=\"\n\"$");
st.registerRenderer(String.class, new
FixesLengthRenderer());
st.setAttribute("elems", new String[] { "ABC", "DEFG" });
System.out.println(st.toString());
}
}
More information about the stringtemplate-interest
mailing list