我有这个程序打印所需的format
数据。但是我很难让它发挥作用。
这是我的代码和输出:
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
public class TestingStuff {
public static void main(String[] args){
Calendar calendar = Calendar.getInstance();
calendar = new GregorianCalendar(2014, 07, 18);
Date startDate = calendar.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy");
String formatted = simpleDateFormat.format(startDate);
String result="";
String header2=String.format("%s %20s %20s %20s%n", "Account","Date","Hours","Skill");
result+=header2;
result+="-----------------------------------------------------------------------\n";
result+=String.format("summary %20s%n",formatted);
result+=String.format("Totabl Billable: %25s%n", 40);
result+=String.format("Total Non-Billable: %25s%n", 0);
result+=String.format("Total Hours %25s%n", 40);
System.out.println(result);
}
}
输出:
Account Date Hours Skill
-----------------------------------------------------------------------
summary 08/18/14
Totabl Billable: 40
Total Non-Billable: 0
Total Hours 40
预期产出:
Account Date Hours Skill
-----------------------------------------------------------------------
summary 08/18/14
Totabl Billable: 40
Total Non-Billable: 0
Total Hours 40
正如您所看到的那样,数字不是以标题标题为中心。我也很难编码spaces
的数量,例如(%20s
),我猜这不是正确的方法。有没有办法告诉你
用居中自动格式化?
答案 0 :(得分:1)
String header2=String.format("%s\t\t\t%s\t\t\t%s\t\t\t%s\n", "Account","Date","Hours","Skill");
result+=header2;
result+="-------------------------------------------------------------------------------\n";
result+=String.format("summary \t\t%s\n",formatted);
result+=String.format("Totabl Billable: \t\t\t\t%s\n", 40);
result+=String.format("Total Non-Billable: \t\t\t\t%s\n", 0);
result+=String.format("Total Hours \t\t\t\t\t%s\n", 40);
System.out.println(result);
这应该可行。即使我输入不同的号码也为我工作。
答案 1 :(得分:1)
我建议使用java.util.Formatter' - '标记左对齐。来自Javadoc:
' - ''\ u002d'左对齐输出。空格('\ u0020')将根据需要添加到转换值的末尾,以填充字段的最小宽度。
因此,如果我们将此应用于您的示例:
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar = new GregorianCalendar(2014, 07, 18);
Date startDate = calendar.getTime();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("MM/dd/yy");
String formatted = simpleDateFormat.format(startDate);
String result = "";
String header2 = String.format("%s %20s %20s %20s%n", "Account", "Date", "Hours", "Skill");
result += header2;
result += "-----------------------------------------------------------------------\n";
result += String.format("summary %20s%n", formatted);
result += String.format("%-40s %4d%n", "Totabl Billable:", 40);
result += String.format("%-40s %4d%n", "Total Non-Billable:", 0);
result += String.format("%-40s %4d%n", "Total Hours:", 40);
System.out.println(result);
}
将第一个输入(行标签)填充空格以匹配固定宽度(在本例中为40)。这将产生:
Account Date Hours Skill
-----------------------------------------------------------------------
summary 08/18/14
Totabl Billable: 40
Total Non-Billable: 0
Total Hours 40
这为动态行标签提供了额外的好处,因为无论标签的长度如何,它都会自动填充到指定的宽度。它会比为每个可能的标签计算空间更灵活。