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,可以在組合或分段輸出文字時插入定位字元。後續值與前一個值之間的實際顯示距離,取決於輸出環境的定位點設定。