Java 打印格式

2018-02-12 22:20 更新

Java格式 - Java 打印格式


不同的格式字符可以格式化不同數(shù)據(jù)類型的值。例如,“s"用于將值格式化為字符串。

Java 打印格式化類型可以將數(shù)據(jù)類型格式化為四種類型:

  • 一般格式化
  • 字符格式化
  • 數(shù)字格式化
  • 日期/時間格式

大寫變量

許多轉(zhuǎn)換字符具有大寫變體。例如,“S"是“s"的大寫變體。

大寫變量將格式化的輸出轉(zhuǎn)換為大寫。

下面的代碼演示了使用大寫變量“S"的效果。

public class Main {
  public static void main(String[] args) {
    System.out.printf("%s and  %<S", "abc");
  }
}

上面的代碼生成以下結(jié)果。

一般格式化

一般格式化可以格式化任何數(shù)據(jù)類型的值。

下表列出了可用的轉(zhuǎn)化根據(jù)一般格式類別。

  • 轉(zhuǎn)換字母: b
    大寫: B
    基于參數(shù)輸出“true”或“false”。 “false”表示空參數(shù)和false布爾參數(shù)。 否則,“真”。
  • 轉(zhuǎn)換字母: h
    大寫: H
    以字符串的參數(shù)的十六進制格式輸出哈希碼。 如果參數(shù)為null,它會產(chǎn)生“null”。
  • 轉(zhuǎn)換字母: s
    大寫: S
    輸出參數(shù)的字符串表示形式。
    如果參數(shù)為null,它會產(chǎn)生一個“null”字符串。 如果參數(shù)實現(xiàn)了Formattable接口,它將調(diào)用參數(shù)的formatTo()方法。
    如果參數(shù)不實現(xiàn)Formattable接口,則調(diào)用toString()方法。

一般格式化的格式說明符的一般語法是

%<argument_index$><flags><width><.precision><conversion>

width 指定輸出中的最小字符數(shù)。

如果字符串表示的長度小于width值,結(jié)果將用空格填充。

默認情況下,空格填充在參數(shù)值的左側(cè)執(zhí)行。如果使用“ - "標志,則向右執(zhí)行空格填充。

寬度和精度一起決定結(jié)果的最終內(nèi)容。

precision指定輸出的最大字符數(shù)。在應用寬度之前,精度應用于參數(shù)。

如果精度小于參數(shù)的長度,參數(shù)被截斷為在精度值中設置的長度,并執(zhí)行空間填充以將長度與寬度的值相匹配。

考慮下面的代碼段:

System.out.printf(""%4.1s"",  "abc");

上面的代碼生成以下結(jié)果。


例子

以下是使用布爾,字符串和散列碼格式轉(zhuǎn)換的一些示例。

public class Main {
  public static void main(String[] args) {
    // Boolean conversion
    System.out.printf(""%b", "%6b", "%.4b"%n", true, false, true);
    System.out.printf(""%b", "%6b", "%.4b"%n", "A", "B", "C");
    System.out.printf(""%B", "%6b",  "%.4b"%n", "A", "B", "C");
    System.out.printf("%b %n", 2014);
    System.out.printf("%b %n", new Object());

    // String conversion
    System.out.printf(""%s",  "%5s",  "%.3s"%n", "A", "B", "C");
    System.out.printf(""%S",  "%5S", "%.3S"%n", "A", "B", "C");

    // Use "-" flag to left-justify the result. 
    // width requires the "-" flag
    System.out.printf(""%S", "%-5S", "%.3S"%n", "A", "B", "C");
    System.out.printf("%s %n", 2014);
    System.out.printf("%s %n", true);
    System.out.printf("%s %n", new Object());

    // Hash Code conversion
    System.out.printf(""%h", "%5h", "%.3h"%n", "A", "B", "A");
    System.out.printf(""%H", "%5H",  "%.3H"%n", "A", "B", "A");
    System.out.printf("%h %n", 2014);
    System.out.printf("%h %n", true);
    System.out.printf("%h %n", new Object());
  }
}

上面的代碼生成以下結(jié)果。

自定義格式化

我們可以通過“s"和“S"轉(zhuǎn)換使用自定義格式。

如果值實現(xiàn) java.util.Formattable 界面,“s"或“S"轉(zhuǎn)換調(diào)用值的“ formatTo()方法來獲取格式化結(jié)果。

formatTo()方法從該值可以接受一個Formatter對象,flags,width和precision作為參數(shù)。

我們可以檢查備用標志“#"。 我們可以支持“s"轉(zhuǎn)換的大寫variantS。

import java.util.Formattable;
import java.util.FormattableFlags;
import java.util.Formatter;

class MyFormattableObject implements Formattable {
  public void formatTo(Formatter formatter, int flags, int width, int precision) {
    int alternateFlagValue = FormattableFlags.ALTERNATE & flags;
    if (alternateFlagValue == FormattableFlags.ALTERNATE) {
      System.out.println("FormattableFlags.ALTERNATE");
    }
    int upperFlagValue = FormattableFlags.UPPERCASE & flags;
    if (upperFlagValue == FormattableFlags.UPPERCASE) {
      System.out.println(FormattableFlags.UPPERCASE);
    }
    int leftJustifiedFlagValue = FormattableFlags.LEFT_JUSTIFY & flags;
    if (leftJustifiedFlagValue == FormattableFlags.LEFT_JUSTIFY) {
      System.out.println("Left-justified flag "-" is used");
    } else {
      System.out.println("Left-justified flag "-" is not used");
    }

    formatter.format("value");
  }
}

public class Main {
  public static void main(String[] args) {
    MyFormattableObject fp = new MyFormattableObject();
    System.out.printf("%s %n", fp );
    System.out.printf("%#s %n", fp );
    System.out.printf("%S %n", fp );
    System.out.printf("%#S %n", fp );
    
  }
}

上面的代碼生成以下結(jié)果。

字符格式化

字符格式化也適用于char基本數(shù)據(jù)類型或字符對象作為byte, Byte, short, Short, int, 或Integer值是有效的Unicode代碼點。

要測試整數(shù)值是否表示有效的Unicode代碼,請使用靜態(tài)方法 Character.isValidCodePoint(int value)。

字符格式化的轉(zhuǎn)換字符為“c"或大寫變量“C"。

字符格式化不支持標志“#"和精度。

標志“ - "和寬度控制寬度和對齊方式,如一般格式化。

public class Main {
  public static void main(String[] args) {
    System.out.printf("%c %n",  "a"); 
    System.out.printf("%C %n",  "a"); 
    System.out.printf("%C %n",  98); 
    System.out.printf(""%5C" %n",  102); 
    System.out.printf(""%-5C" %n",  102);
  }
}

上面的代碼生成以下結(jié)果。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號