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

IT 文章2年前 (2023)发布 小编
0 0 0

学习将字符串左对齐、右对齐或居中对齐。我创建了一个实用程序类StringAlignUtils,它将所有逻辑包装在其中,并提供我们可以直接调用的方便方法。

1. 对长文本使用自定义格式

1.1. StringAlignUtils类

该类StringAlignUtils扩展了java.text.Format类。Format是一个抽象基类,用于格式化区域设置敏感信息,例如日期、消息和数字。

StringAlignUtils定义三个用于对齐顺序的枚举常量。

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

  • 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) );
Java 中的字符串左对齐、右对齐或居中对齐

1.3. 字符串右对齐示例

StringAlignUtils util = new StringAlignUtils(50, Alignment.RIGHT);
System.out.println( util.format(sampleText) );
Java 中的字符串左对齐、右对齐或居中对齐

1.3. 字符串右对齐示例

StringAlignUtils util = new StringAlignUtils(50, Alignment.RIGHT);
System.out.println( util.format(sampleText) );
Java 中的字符串左对齐、右对齐或居中对齐

1.4. 字符串中心对齐示例

StringAlignUtils util = new StringAlignUtils(50, Alignment.CENTER);
System.out.println( util.format(sampleText) );

Java 中的字符串左对齐、右对齐或居中对齐StringAlignUtils您可以根据需要随意编辑和定制。

2. 结论

这个简短的 Java 教程教我们如何在 Java 中对齐长字符串。我们通过示例学习了使用填充空格来左对齐、右对齐和居中对齐。

© 版权声明

相关文章

暂无评论

暂无评论...