HOWTO · Java

如何在 Java 中插入制表符

了解如何使用 转义序列、Unicode U+0009 和字符串构建替代方法,在 Java 中插入水平制表符。

本页内容

在 Java 中,要在文本值之间插入水平制表符,请将 \t 转义序列放在字符串字面量中。制表符会将后续文本移到下一个制表位;实际显示的间距取决于输出内容的显示程序。

运行以下示例:

在 Java 中使用 \t 制表符转义序列插入制表符

在 Java 源代码中,反斜杠和 t 组成一个转义序列。Java 创建字符串时会将它转换为制表符,因此应将它放在需要出现制表符的位置:

public class TabExample {
  public static void main(String[] args) {
    System.out.println("Name:\tAda");
  }
}

程序会在同一行依次输出 Name:、一个水平制表符和 Ada。终端、编辑器或其他输出界面会自行决定制表位的宽度,因此显示出来的间隔并不是固定数量的空格。

在 Java 中使用 Unicode 字符插入制表符

水平制表符对应的 Unicode 码点是 U+0009。Java 也能识别源代码中的 Unicode 转义序列 \u0009;将它拼接在两个值之间即可在此处插入制表符。Unicode 字符参考提供了更多背景信息。Unicode 是字符编码标准,并不是一种将所有字符都固定编码为 16 位的方案。

这个完整示例使用 Unicode 转义序列分隔两个值。输出中包含一个水平制表符,其显示宽度取决于输出界面采用的制表位。

public class TabExample {
  public static void main(String[] args) {
    String tab = "\u0009";
    System.out.println("Name:" + tab + "Ada");
  }
}
Name:	Ada

在普通 Java 字符串中,"\t" 是表示同一水平制表符的较短且常见的写法。

在 Java 中使用 String.format 实现空格填充对齐

String.format 会根据格式字符串格式化值。字段宽度会用空格填充较短的值;它不会插入制表符。这个完整示例将 Name: 的最小宽度设为十个字符,因此 Ada 前面会出现五个空格:

public class TabExample {
  public static void main(String[] args) {
    String formatted = String.format("%-10s%s", "Name:", "Ada");
    System.out.println(formatted);
  }
}
Name:     Ada

如果数据中需要真正的制表符,请使用 \t;如果需要的是空格填充,请使用字段宽度。无论采用哪种方式,使用比例字体或值超出所选宽度时,显示出来的列都可能参差不齐。

在 Java 中使用 StringBuilder 或 StringBuffer 插入制表符

将多个片段组装成字符串时,可以在它们的连接处追加制表符。这个示例用两个类演示相同的构造方式:它们都会在 Name: 和 Ada 之间追加 '\t':

public class TabExample {
  public static void main(String[] args) {
    StringBuilder builder = new StringBuilder();
    builder.append("Name:").append('\t').append("Ada");
    System.out.println(builder);

    StringBuffer buffer = new StringBuffer();
    buffer.append("Name:").append('\t').append("Ada");
    System.out.println(buffer);
  }
}
Name:	Ada
Name:	Ada

StringBuffer 的操作带有同步机制,StringBuilder 则没有。应根据是否需要对缓冲区操作进行同步来选择,而不要假定其中一个始终更快。这两个类都适合逐步构建字符串;如果只是拼接一个简短且固定的字符串,使用 "\t" 连接值会更简单。制表符的显示宽度仍取决于输出界面。

在 Java 中使用多条 System.out.print 语句插入制表符

对每个片段调用一次 System.out.print,可让内容留在当前行;最后对末尾的值使用 println 来结束该行。调用之间的制表符会将后续内容移到输出界面决定的制表位:

public class TabExample {
  public static void main(String[] args) {
    System.out.print("Name:");
    System.out.print('\t');
    System.out.println("Ada");
  }
}
Name:	Ada

当各个片段分别产生时,这种方式很实用;如果只需一个表达式,使用包含 \t 的字符串会更简洁。

总结

在 Java 字符串中需要字面意义上的水平制表符时,请使用 \t。U+0009 和 \u0009 表示同一个制表符,而 String.format 的字段宽度会添加空格以实现简单对齐。使用 StringBuilder、StringBuffer 或多次调用 print,可以在逐步组装或输出文本时插入制表符。后续值与制表符之间显示出的距离取决于输出环境的制表位。