簡體   English   中英

Java - 如何在 printf 中用小數替換格式空格?

[英]Java - How to replace spaces of formatting with decimals in printf?

我想打印出一個項目列表,在第一個文本和最終變量之間有一行句號或省略號,每邊都有一個空格。 因此,如果間距為三個或更多,則中間應該有一個句點。 如果可能的話,我想在 printf 中執行此操作; 使用格式化 我知道如果我在寬度前面放一個 0 作為標志,那么多余的字符將被視為零,但我希望零作為小數點。

可以這樣做嗎?

示例代碼:

    System.out.printf("Egg Count: %9d%n", 300); //list.getNumberOfEggs()
    System.out.printf("Chicken Count: %5d%n", 1378); //list.getNumberOfChickens()
    System.out.printf("Corn Oil Count: %4d%n", 619); //list.getNumberOfCornOil()
    System.out.printf("Orange Count: %6d%n", 2000); //list.getNumberOfOranges()

樣本 Output:

Egg Count:       300
Chicken Count:  1378
Corn Oil Count:  619
Orange Count:   2000

所需 Output:

Egg Count: ..... 300
Chicken Count:  1378
Corn Oil Count:  619
Orange Count: . 2000

我找到了 JS - Separating a string with periods to meet certain character length這有點相似,但不是我在使用格式化時要找的東西。

我還找到了 Change the default padding character in Java printf? 可用於將空格替換為小數位,但前提是上述 printf 在冒號后拆分。 這也沒有解決冒號之后和第一個數字之前的空格問題; 也許這可以通過正則表達式/正則表達式以某種方式完成?

使用String.repeat(int times)重復. 基於位數的字符。

System.out.printf("Egg Count: %s %d%n",".".repeat(8-String.valueOf(300).length()), 300); //list.getNumberOfEggs()
System.out.printf("Chicken Count: %s %d%n",".".repeat(4-String.valueOf(1378).length()), 1378); //list.getNumberOfChickens()
System.out.printf("Corn Oil Count: %s %d%n",".".repeat(3-String.valueOf(619).length()), 619); //list.getNumberOfCornOil()
System.out.printf("Orange Count: %s %d%n",".".repeat(5-String.valueOf(2000).length()), 2000); //list.getNumberOfOranges()

您可以使用 StringBuilder 來填充所需的字符。

public static String padLeftCharacter(int inputInteger, int length, String padChar) {
    String inputString = " " + inputInteger;
    if (inputString.length() >= length) {
        return inputString;
    }
    StringBuilder sb = new StringBuilder();
    while (sb.length() < length - inputString.length()) {
        sb.append(padChar);
    }
    sb.append(inputString);

    return sb.toString();
}
System.out.println("Egg Count: " + padLeftCharacter(300, 9, "."));
System.out.println("Chicken Count: " + padLeftCharacter(1378, 5, "."));
System.out.println("Corn Oil Count: " + padLeftCharacter(619, 4, "."));
System.out.println("Orange Count: " + padLeftCharacter(2000, 6, "."));

結果

Egg Count: ..... 300
Chicken Count:  1378
Corn Oil Count:  619
Orange Count: . 2000

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM