Java 中的字符串左对齐、右对齐或居中对齐

培训教学 潘老师 8个月前 (09-13) 515 ℃ (0) 扫码查看

学习将字符串左对齐、右对齐或居中对齐。我创建了一个实用程序类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 中对齐长字符串。我们通过示例学习了使用填充空格来左对齐、右对齐和居中对齐。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/teach/9001.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】