簡體   English   中英

(Java String.format)無法將此列設置為固定寬度

[英](Java String.format) Having trouble making this column a fixed width

首先,對於這樣的問題是否已經解決,我深表歉意。 我試圖搜索類似這樣的問題,但沒有找到任何類似的問題(至少與我使用的關鍵字類似)。 請根據需要對此進行審核! 這是我在網站上的第一篇文章。

我正在Java中練習String.format,無法使“名稱”列的元素都具有相同的寬度。 如果所有相關,我正在使用JDK 9。 在下面的代碼中,有問題的問題在for循環塊內。 我從各自的String數組中提取名字和姓氏。 我知道如果將每個全名都放入一個String中就可以解決我的問題,但是為了進行此練習並為了進一步提高Java技能,我想知道是否有解決此問題的方法。 謝謝 :)

public static void grades() {
    Random rand = new Random();
    // final grade is calculated based on points achieved out of 45. Rounded to 1 decimal
    String[] rosterFirst = {"Harry", "Seamus", "Dean", "Neville", "Ron", "Dennis"};
    String[] rosterLast = {"Potter", "Finnegan", "Thomas", "Longbottom", "Weasley", "Creevey"};

    System.out.println("2018 Hogwarts Graduating Class Scores \n" +
        String.format("%2$-25s %1$-12s", "Grade", "Name"));

    for (int i = 0; i < rosterFirst.length; i++) {
        double finalGrade = (25 + rand.nextDouble() * 20) / 45 * 100;
        System.out.println(String.format("%s, %-15s %-12.1f", rosterLast[i], rosterFirst[i], finalGrade));
    }
}

輸出:

2018 Hogwarts Graduating Class Scores 
Name                      Grade       
Potter, Harry         70.3
Finnegan, Seamus         75.9
Thomas, Dean         96.9
Longbottom, Neville         98.2
Weasley, Ron         58.7
Creevey, Dennis         76.0

(不確定本文中代碼輸出的格式是否錯誤。如果正確,請更正我)

當前的問題是姓氏(第一個參數)沒有固定的寬度。 當姓氏的寬度改變時,這將“弄亂”字符串的其余部分。 此外,不可能僅使用String.format來指定附加參數的絕對位置。 寬度格式僅影響相對位置。

一種獲得所需行為的簡單方法是將全名指定為具有固定寬度的單個字段,即:

String fullName = rosterLast[i] + ", " + rosterFirst[i];

System.out.println(
  String.format("%-20s %-12.1f", fullName, finalGrade));

現在只有兩個實際提供給格式的參數,並且指定了固定的寬度。 將逗號作為全名的一部分可以避免各個名稱組件和逗號之間的固定寬度交互。

暫無
暫無

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

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