实例程序实现了,指定字符串显示时的对齐格式:左对齐,右对齐,居中对齐。并能指定一行最多显示的字符数
一、关键技术点:
1、向字符串的合适位置插入一定数量的空格,使得在显示时,看起来是对齐的。
2、当字符串长度大于一行的最大字符数时,插入换行符("/n"),在显示它时将分行显示
二、演示实例
package
book.String;

/** */
/**
* 字符串对齐器
* @author joe
*
*/


public
class
StringAlign
...
{
public static final int JUST_LEFT = 0; //左对齐
public static final int JUST_RIGHT = 2; //右对齐
public static final int JUST_CENTER = 1; //居中对齐
private int just; //当前对齐格式
private int maxChars; //一行的最大长度

/** *//** 默认构造函数 */

public StringAlign() ...{
//默认为居中对齐,一行的最大长度为80
this.just = JUST_CENTER;
this.maxChars = 80;
}

/** *//** 构造一个字符串对齐器,需要传入一行的最大长度和对齐的格式 */

public StringAlign(int maxChars, int just) ...{
this(); //首先构造一个默认字符串对其器
//根据传入参数修改字符串对齐器的属性
this.setJust(just);
this.setMaxChars(maxChars);
}


public int getJust() ...{
return just;
}


/** *//** 设置字符串对齐器的对齐格式 */

public void setJust(int just) ...{

switch(just) ...{
case JUST_LEFT:
case JUST_RIGHT:
case JUST_CENTER:
this.just = just;
break;
default:
System.out.println("invalid justification arg.");
}
}


public int getMaxChars() ...{
return maxChars;
}


/** *//** 设置字符串对齐器的一行最大字符数 */

public void setMaxChars(int maxChars) ...{

if(maxChars < 0) ...{
System.out.println("maxChars must be positive.");

} else ...{
this.maxChars = maxChars;
}
}

/** *//** 对齐一个字符串 */

public String format(String s) ...{
StringBuffer where = new StringBuffer();
//从待对其的字符串中取出一段子字符串,子串长度为行最大长度和s长度的较小值
int wantedLength = Math.min(s.length(), this.maxChars);
String wanted = s.substring(0, wantedLength);
//根据对齐模式,将空格插入到合适的位置

switch(this.just) ...{
case JUST_LEFT:
//左对齐,将空格插入到字符串的右边
where.append(wanted);
pad(where, maxChars - wantedLength);
break;
case JUST_RIGHT:
//右对齐,将空格插入到字符的左边
pad(where,maxChars - wantedLength);
where.append(wanted);
break;
case JUST_CENTER:
//居中对齐,将空格平均插入到字符串的两边
int startPos = where.length();
pad(where, (maxChars - wantedLength) / 2);
where.append(wanted);
pad(where, (maxChars - wantedLength) / 2);
//调整舍入误差
pad(where, maxChars - (where.length() - startPos));
break;
}
//如果原字符串长度大于一行的最大长度,则将余下部分放入下一行

if(s.length() > wantedLength) ...{
String remainStr = s.substring(wantedLength);
where.append("/n " + this.format(remainStr));
}
return where.toString();
}

/** *//** 在to后面append howMany个空格字符 */

protected final void pad(StringBuffer to, int howMany) ...{

for (int i = 0; i < howMany; i++) ...{
to.append(" ");
}
}

public static void main(String[] args) ...{
//一行最多20个字符,居中显示
StringAlign formatter = new StringAlign(20, StringAlign.JUST_CENTER);
//显示页码
System.out.println(formatter.format("- i -"));
System.out.println(formatter.format(Integer.toString(444)));
System.out.println(formatter.format("kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"));
//左对齐
System.out.println();
formatter = new StringAlign(20, StringAlign.JUST_LEFT);
System.out.println(formatter.format("- i -"));
System.out.println(formatter.format(Integer.toString(444)));
System.out.println(formatter.format("kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"));
//右对齐
System.out.println();
formatter = new StringAlign(20, StringAlign.JUST_RIGHT);
System.out.println(formatter.format("- i -"));
System.out.println(formatter.format(Integer.toString(444)));
System.out.println(formatter.format("kkkkkkkkkkkkkkkkkkkkkkkkkkkkkk"));
}
}
输出结果:
-
i
-
444
kkkkkkkkkkkkkkkkkkkk
kkkkkkkkkk

-
i
-
444
kkkkkkkkkkkkkkkkkkkk
kkkkkkkkkk

-
i
-
444
kkkkkkkkkkkkkkkkkkkk
kkkkkkkkkk