文
章
目
录
章
目
录
学习将字符串左对齐、右对齐或居中对齐。我创建了一个实用程序类StringAlignUtils
,它将所有逻辑包装在其中,并提供我们可以直接调用的方便方法。
1. 对长文本使用自定义格式
1.1. StringAlignUtils类
该类StringAlignUtils
扩展了java.text.Format类。Format
是一个抽象基类,用于格式化区域设置敏感信息,例如日期、消息和数字。
StringAlignUtils
定义三个用于对齐顺序的枚举常量。
LEFT
CENTER
RIGHT
还StringAlignUtils
需要一个参数maxChars指定单行中的字符长度。如果给定 String 中的字符数超过maxChars,则该 String 会被拆分为两个 String 。
import java.text.FieldPosition;
import java.text.Format;
import java.text.ParsePosition;
import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;
public class StringAlignUtils extends Format {
private static final long serialVersionUID = 1L;
public enum Alignment {
LEFT, CENTER, RIGHT,
}
/** Current justification for formatting */
private Alignment currentAlignment;
/** Current max length of a line */
private int maxChars;
public StringAlignUtils(int maxChars, Alignment align) {
switch (align) {
case LEFT:
case CENTER:
case RIGHT:
this.currentAlignment = align;
break;
default:
throw new IllegalArgumentException("invalid justification arg.");
}
if (maxChars < 0) {
throw new IllegalArgumentException("maxChars must be positive.");
}
this.maxChars = maxChars;
}
public StringBuffer format(Object input, StringBuffer where, FieldPosition ignore)
{
String s = input.toString();
List<String> strings = splitInputString(s);
ListIterator<String> listItr = strings.listIterator();
while (listItr.hasNext())
{
String wanted = listItr.next();
//Get the spaces in the right place.
switch (currentAlignment)
{
case RIGHT:
pad(where, maxChars - wanted.length());
where.append(wanted);
break;
case CENTER:
int toAdd = maxChars - wanted.length();
pad(where, toAdd / 2);
where.append(wanted);
pad(where, toAdd - toAdd / 2);
break;
case LEFT:
where.append(wanted);
pad(where, maxChars - wanted.length());
break;
}
where.append("\n");
}
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();
}
/** ParseObject is required, but not useful here. */
public Object parseObject(String source, ParsePosition pos) {
return source;
}
private List<String> splitInputString(String str) {
List<String> list = new ArrayList<String>();
if (str == null)
return list;
for (int i = 0; i < str.length(); i = i + maxChars)
{
int endindex = Math.min(i + maxChars, str.length());
list.add(str.substring(i, endindex));
}
return list;
}
}
1.2. 字符串左对齐示例
String sampleText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt "
+ "ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris "
+ "nisi ut aliquip ex ea commodo consequat.";
StringAlignUtils util = new StringAlignUtils(50, Alignment.LEFT);
System.out.println( util.format(sampleText) );
1.3. 字符串右对齐示例
StringAlignUtils util = new StringAlignUtils(50, Alignment.RIGHT);
System.out.println( util.format(sampleText) );
1.3. 字符串右对齐示例
StringAlignUtils util = new StringAlignUtils(50, Alignment.RIGHT);
System.out.println( util.format(sampleText) );
1.4. 字符串中心对齐示例
StringAlignUtils util = new StringAlignUtils(50, Alignment.CENTER);
System.out.println( util.format(sampleText) );
StringAlignUtils
您可以根据需要随意编辑和定制。
2. 结论
这个简短的 Java 教程教我们如何在 Java 中对齐长字符串。我们通过示例学习了使用填充空格来左对齐、右对齐和居中对齐。