String.format() 没有正确格式化输出

String.format() doesnt format the output correct

我有一个问题,我的输出不正确,我不知道如何解决它。

在此图片中,您可以看到页眉 Januar 2017 。 . . .推迟了一段时间。

Januar 2017            Februar 2017            Maerz 2017            
So|01|            |1    Mi|01|            |32    Mi|01|            |60    
Mo|02|            |2    Do|02|            |33    Do|02|            |61    
Di|03|            |3    Fr|03|            |34    Fr|03|            |62    
Mi|04|            |4    Sa|04|            |35    Sa|04|            |63    
Do|05|            |5    So|05|            |36    So|05|            |64    
Fr|06|            |6    Mo|06|            |37    Mo|06|            |65    

我正在尝试这样做。月份名称应从工作日名称开始(短) So Mo Di Mi Do Fr Su

Januar 2017             Februar 2017             Maerz 2017            
So|01|            |1    Mi|01|            |32    Mi|01|            |60    
Mo|02|            |2    Do|02|            |33    Do|02|            |61    
Di|03|            |3    Fr|03|            |34    Fr|03|            |62    
Mi|04|            |4    Sa|04|            |35    Sa|04|            |63    
Do|05|            |5    So|05|            |36    So|05|            |64    
Fr|06|            |6    Mo|06|            |37    Mo|06|            |65    

这就是我构建 monthPaper 的代码

public LinkedList<String> buildMonth(int month) {
    int lengthOfMonth = calender.getLengthOfMonth(this.year, month);
    LinkedList<String> monthList = new LinkedList<>();
    monthList.add(String.format("%-10s",monthname[month]) + String.format("%-17s", this.year));

    for (int day = 1; day <= lengthOfMonth; day++) {
        int daynumber = kf.daynumber(day, month, this.year);
        int weekday = kf.wochentag_im_jahr(this.year, daynumber);


            String monthPlan = weekdayShort[weekday] + "|" + String.format("%02d",day) +"|\t\t\t|" +String.format("%-10s",calender.getTwoDigit(daynumber));
            monthList.add(monthPlan);


    }
    return monthList;
}

我认为问题在于 /t 的长度在不同的系统中可能会有所不同,您应该更改日期字符串的格式。尝试这样做

System.out.println(String.format("%s|%02d|%20s%-6s", weekdayShort[weekday], day, "|", calender.getTwoDigit(daynumber)));