java第2部分中的列格式设置

java第2部分中的列格式设置,java,formatting,Java,Formatting,所以我可以对齐前两列,但如何让其他三列也对齐 这是我的代码: private static void makeFile(String[] name, String[] nickname, String[] capital, String[] flowers, String[] population) throws FileNotFoundException { PrintWriter out = new PrintWriter ("out.txt"); for (int i = 0; i

所以我可以对齐前两列,但如何让其他三列也对齐

这是我的代码:

  private static void makeFile(String[] name, String[] nickname, String[] capital, String[] flowers, String[] population) throws FileNotFoundException {
 PrintWriter out = new PrintWriter ("out.txt");
 for (int i = 0; i< 50 ; i++){
     out.printf("%-15s %s \n", name[i], nickname[i]+ " " +  capital[i] + " " +flowers[i]+ " "+ population[i]);

 }
 out.close();
}
私有静态void makeFile(字符串[]名称、字符串[]昵称、字符串[]大写、字符串[]花朵、字符串[]填充)抛出FileNotFoundException{
PrintWriter out=新的PrintWriter(“out.txt”);
对于(int i=0;i<50;i++){
out.printf(“%-15s%s\n”,名称[i],昵称[i]+“”+大写[i]+“”+鲜花[i]+“”+人口[i]);
}
out.close();
}
}

这就是我得到的:

您需要将所有列放入printf中 差不多

out.printf("%-15s %-15s %-15s %-15s %-15s\n", name[i], nickname[i], capital[i], flowers[i], population[i]);

您可能需要根据文本的长度调整-15。

您可以这样做

// Get the maximum length of any string in the array, or 0.
private static int getMaxLength(String[] in) {
  int c = 0;
  if (in != null && in.length > 0) {
    for (String i : in) {
      i = (i != null) ? i.trim() : "";
      if (i.length() > c) {
        c = i.length();
      }
    }
  }
  return c;
}

// Pad any input string to the minimum length.
private static String padString(String in, int min) {
  in = (in != null) ? in.trim() : "";
  StringBuilder sb = new StringBuilder(in);
  while (sb.length() < min) {
    sb.append(' ');
  }
  return sb.toString();
}

private static void makeFile(String[] name,
  String[] nickname, String[] capital,
  String[] flowers, String[] population) {
  PrintWriter out = null;
  try {
    out = new PrintWriter("out.txt");

    // Add 1 to get at least 1 space between the maximum and the next item.
    int nameLen = getMaxLength(name) + 1;
    int nickLen = getMaxLength(nickname) + 1;
    int capitalLen = getMaxLength(capital) + 1;
    int flowersLen = getMaxLength(flowers) + 1;
    int populationLen = getMaxLength(population);

    for (int i = 0; i < name.length; i++) {
      out.println(padString(name[i], nameLen)
        + padString((nickname.length > i) ? nickname[i]
                : "", nickLen)
        + padString((capital.length > i) ? capital[i] : "",
            capitalLen)
        + padString((flowers.length > i) ? flowers[i] : "",
            flowersLen)
        + padString((population.length > i) ? population[i]
                : "", populationLen));
    }
  } catch (FileNotFoundException fnfe) {
    fnfe.printStackTrace(System.err);
  } finally {
    out.close();
  }
}

public static void main(String[] args) {
  String[] name = { "Alabama", "Alaska", "Arizona" };
  String[] nickname = { "Yellowhammer State",
    "Last Frontier", "Grand Canyon State" }; 
  String[] capital = {
    "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", "Y", "Z" };
  String[] flowers = { "Rose", "Carnation", "Orchid" };
  String[] population = { "1", "100", "1000" };
  makeFile(name, nickname, capital, flowers,
    population);
}
//获取数组中任何字符串的最大长度,或0。
私有静态int getMaxLength(字符串[]in){
int c=0;
如果(in!=null&&in.length>0){
for(字符串i:in){
i=(i!=null)?i.trim():“”;
如果(i.长度()>c){
c=i.长度();
}
}
}
返回c;
}
//将任何输入字符串填充到最小长度。
私有静态字符串padString(字符串输入,int最小值){
in=(in!=null)?in.trim():“”;
StringBuilder sb=新的StringBuilder(in);
while(sb.length()i)?昵称[i]
:“”,尼克伦)
+padString((大写.length>i)?大写[i]:“”,
上校(艾伦)
+焊盘串((flowers.length>i)?flowers[i]:“”,
(弗劳斯伦)
+焊盘字符串((population.length>i)?填充[i]
:“”,populationLen));
}
}捕获(FileNotFoundException fnfe){
fnfe.printStackTrace(System.err);
}最后{
out.close();
}
}
公共静态void main(字符串[]args){
字符串[]名称={“阿拉巴马州”、“阿拉斯加州”、“亚利桑那州”};
字符串[]昵称={“黄锤州”,
“最后的边界”,“大峡谷州”};
字符串[]大写={
“XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”,“Y”,“Z”};
串[]花={“玫瑰”、“康乃馨”、“兰花”};
字符串[]填充={“1”、“100”、“1000”};
makeFile(名称、昵称、大写、花卉、,
人口);
}