?? stringalign.java
字號:
package book.string;
/**
* 字符串對齊器。可以指定對齊格式和一行的最大字符數
* 對齊格式有左對齊、居中、又對齊
*/
public class StringAlign {
/** 左對齊格式 */
public static final int JUST_LEFT = 0;
/** 居中格式*/
public static final int JUST_CENTER = 1;
/** 右對齊格式 */
public static final int JUST_RIGHT = 2;
/** 當前對齊格式 */
private int just;
/** 一行的最大長度 */
private int maxChars;
/**
* 默認構造函數
*/
public StringAlign(){
//默認為居中對齊
this.just = JUST_CENTER;
//默認一行的最大長度為80
this.maxChars = 80;
}
/**
* 構造一個字符串對齊器,需要傳入一行的最大長度和對齊的格式。
* @param maxChars
* @param just
*/
public StringAlign(int maxChars, int just) {
//首先構造一個默認字符串對齊器
this();
//根據傳入參數修改字符串對齊器的屬性
this.setJust(just);
this.setMaxChars(maxChars);
}
/** 對齊一個字符串
* @param obj 待對齊的字符串
*/
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_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;
case JUST_LEFT:
//右對齊,將空格字符放在字符串右邊。
where.append(wanted);
pad(where, maxChars - wantedLength);
break;
}
//如果原字符串的長度大于一行的最大長度,則將余下部分放入下一行
if (s.length() > wantedLength){
String remainStr = s.substring(wantedLength);
where.append("\n" + this.format(remainStr));
}
return where.toString();
}
/**
* 在to的后面append howMany個空格字符。
* @param to
* @param howMany
*/
protected final void pad(StringBuffer to, int howMany) {
for (int i = 0; i < howMany; i++)
to.append(" ");
}
public int getJust() {
return just;
}
/**
* 設置字符串對齊器的對齊格式
* @param just
*/
public void setJust(int just) {
switch (just) {
case JUST_LEFT:
case JUST_CENTER:
case JUST_RIGHT:
this.just = just;
break;
default:
System.out.println("invalid justification arg.");
}
}
public int getMaxChars() {
return maxChars;
}
/**
* 設置字符串對齊器的一行最大字符數
* @param maxChars
*/
public void setMaxChars(int maxChars) {
if (maxChars < 0) {
System.out.println("maxChars must be positive.");
} else {
this.maxChars = maxChars;
}
}
public static void main(String[] args) {
//一行最多70個字符,居中顯示。
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("kkkkkkkkkkkkkkkkkkkkkkkkkkkk"));
//左對齊
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("kkkkkkkkkkkkkkkkkkkkkkkkkkkk"));
//右對齊
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("kkkkkkkkkkkkkkkkkkkkkkkkkkkk"));
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -