java字符串应用之字符串对齐器

    实例程序实现了,指定字符串显示时的对齐格式:左对齐,右对齐,居中对齐。并能指定一行最多显示的字符数
   
一、关键技术点:
    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

你可能感兴趣的:(J2SE学习笔记)