0
点赞
收藏
分享

微信扫一扫

字符串对齐方式(十九)


勿以恶小而为之,勿以善小而不为--------------------------刘备
劝诸君,多行善事积福报,莫作恶

上一章简单介绍了 自定义ArrayList(十八),如果没有看过,​​请观看上一章​​

一. 字符串的对齐方式

我们在Word 文档处理的时候, 对于内容常常有 左对齐, 中间对齐,右对齐 等三种常见的方式。

这种对齐方式,是如何实现的呢? 填充空格。

如果是左对齐, 那么就把 右边的不足部分填充空格。

如果是中间对齐, 那么就把左边填充一半空格, 右边填充一半空格。

如果是右对齐, 那么就把左边的部分填充空格。

老蝴蝶仿照 其他文章,写了字符串对齐方式的工具类。

一.一 字符串对齐工具

package com.yjl.collection;

import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;

/**
* package: com.yjl.collection
* className: StringAlign
* Description: 请输入相应的描述
*
* @author : yuezl
* @Date :2020/6/10 19:25
*/
public class StringAlign extends Format {

//定义对齐方式,设置成枚举形式
public enum Justify{
/**左对象*/
LEFT,
/**中间对齐*/
CENTER,
/**右对齐*/
RIGHT

}
// 当前的对齐方式
private Justify justify;
//一行最大能显示的字符
private int lineMaxLength;

public StringAlign() {

}

public StringAlign(Justify justify, int lineMaxLength) {
switch(justify){
case LEFT:
case RIGHT:
case CENTER:
this.justify=justify;
break;
default:{
throw new IllegalArgumentException("invalid justification arg.");
}

}
if(lineMaxLength<=0){
throw new IllegalArgumentException("lineMaxLength must be positive.");
}
this.lineMaxLength = lineMaxLength;
}

//从Format 抽象类中重写的方法
@Override
public StringBuffer format(Object obj, StringBuffer toAppendTo, FieldPosition pos) {
//1. 将传入的值,变成字符串
String s=obj.toString();


//截取字符串s.
String wanted=s.substring(0,Math.min(s.length(),lineMaxLength));
//根据对齐方式,进行设置空格。
switch(justify){

case LEFT:{

//设置进来值
toAppendTo.append(wanted);
//右边追加相应的空格
pad(toAppendTo,lineMaxLength-wanted.length());
break;
}
case CENTER:{
//相差的长度
int toAdd=lineMaxLength-wanted.length();

//左边追加空格

pad(toAppendTo,toAdd/2);

//设置内容
toAppendTo.append(wanted);

//总的减去左边的
pad(toAppendTo,toAdd-toAdd/2);

break;
}
case RIGHT:{
//先添加空格
pad(toAppendTo,lineMaxLength-wanted.length());
//设置值
toAppendTo.append(wanted);
break;
}

}
return toAppendTo;
}

/**
* 追加空格
* @param to 字符串
* @param howMany 要放置几个空格
*/
private final void pad(StringBuffer to,int howMany){
for(int i=0;i<howMany;i++){
to.append(" ");
}
}

//从Format 抽象类中 重写的方法
@Override
public Object parseObject(String source, ParsePosition pos) {
return source;
}


/**
* 格式化展示对齐方式
* @param str 要对齐的字符串
* @return 返回对齐格式化后字符串
*/

public String format(String str){
if(str==null){
return null;
}
if(str.length()==0||str.trim().length()==0){
return "";
}

//获取长度
int countLength=str.length();

//可以占几行
int circleCount=countLength/lineMaxLength;

StringBuffer sb=new StringBuffer();

for(int i=0;i<circleCount;i++){

sb.append(str.substring(0,lineMaxLength)).append("\r\n");

str=str.substring(lineMaxLength);
}


return format(str,sb,null).toString();
}

/**
*
* @return 对齐方式
*/
public Justify getJustify() {
return justify;
}

/**
*
* @param justify 设置对齐方式
*/
public void setJustify(Justify justify) {
this.justify = justify;
}

/**
*
* @return 返回当前行最多能显示的字符个数
*/
public int getLineMaxLength() {
return lineMaxLength;
}

/**
*
* @param lineMaxLength 行最多显示的字符个数
*/
public void setLineMaxLength(int lineMaxLength) {
this.lineMaxLength = lineMaxLength;
}
}

一.二 测试对齐方式

package com.yjl.collection;

import org.junit.Test;

/**
* package: com.yjl.collection
* className: StringAlignTest
* Description: 请输入相应的描述
*
* @author : yuezl
* @Date :2020/6/10 19:44
*/
public class StringAlignTest {
public static void main(String[] args) {

//要对齐的字符串
String s="Hello,My Name is TwoButterfly, Chinese Name is YueZL. I love China,love Java,love World!!!";

//设置对象
StringAlign stringAlign=new StringAlign(StringAlign.Justify.LEFT,20);

//左对齐
String left=stringAlign.format(s);

System.out.println("左对齐:\n"+left);

//设置成中间对齐
stringAlign.setJustify(StringAlign.Justify.CENTER);

String center=stringAlign.format(s);

System.out.println("中间对齐:\n"+center);

//设置成右对齐
stringAlign.setJustify(StringAlign.Justify.RIGHT);

String right=stringAlign.format(s);

System.out.println("右对齐:\n"+right);


}
}

控制台打印输出:

字符串对齐方式(十九)_字符串中间对齐

谢谢您的观看,如果喜欢,请关注我,再次感谢 !!!


举报

相关推荐

0 条评论