import java.text.*;
public class StringAlign extends Format{ public static final int JUST_LEFT='l'; //左对齐常量 public static final int JUST_RIGHT='r'; //右对齐常量 public static final int JUST_CENTER='c'; //居中常量 private int just; //当前的对其 private int maxChars; public StringAlign(int maxChars,int just){ switch (just) { case JUST_CENTER: case JUST_LEFT: case JUST_RIGHT: this.just=just; break; default: throw new IllegalArgumentException("invalid justification arg."); } if(maxChars<0){ throw new IllegalArgumentException("必须是正数!"); } this.maxChars=maxChars; } public StringBuffer format(Object obj,StringBuffer where,FieldPosition ignore){ String s=(String)obj; String wanted=s.substring(0, Math.min(s.length(), maxChars)); //如果没有空间用于对齐,则返回最大行宽的内容 if(wanted.length()>maxChars){ where.append(wanted); } else switch (just) { case JUST_RIGHT: pad(where,maxChars-wanted.length()); where.append(wanted); break; case JUST_LEFT: where.append(wanted); pad(where,maxChars-wanted.length()); break; case JUST_CENTER: int startPos=where.length(); pad(where,(maxChars-wanted.length())/2); where.append(wanted); pad(where,(maxChars-wanted.length())/2); //调整化整误差 pad(where,maxChars-(where.length()-startPos)); break;}
return where; } protected final void pad(StringBuffer to,int howMany){ for(int i=0;i<howMany;i++){ to.append(' '); } } String format(String s){ return format(s,new StringBuffer(),null).toString(); } @Override public Object parseObject(String source, ParsePosition pos) { // TODO Auto-generated method stub return source; }}