使用printf()将输出格式化为网格

时间:2012-11-05 17:55:56

标签: java arrays string printf

我正在尝试使用printf()语句对输出进行网格化。

字符串是通过2D数组生成的,该数组使用两个for循环进行迭代

示例:

    String[][] arr =
    {
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"}
    }

    for(int i = 0; i < arr.length; i++)
    {
       for(int j = 0; j < arr[0].length; j++)
       {
          System.out.printf("%s", arr[i][j]);
       }
    }

我基本上希望输出就像它出现在代码中一样(作为一个5x5网格)但是关于格式化的教程不是很容易理解,而且大多数都没有处理这种格式。

理想情况下,输出应如下所示:

    * 2 1 * 1
    * 2 1 * 1
    * 2 1 * 1
    * 2 1 * 1
    * 2 1 * 1

我的问题是,除了如何使用printf()字符这样做之外,我是否会在嵌套的for循环中遇到任何问题?此外,我了解%s的来源,但任何进一步的符号用法都超出了我的意思。有人可以解释为什么他们会使用他们正在使用的符号和字符吗?

非常感谢。

4 个答案:

答案 0 :(得分:2)

您需要在System.out.println();结束后添加inner loop以在换行符中打印下一行: -

for(int i = 0; i < arr.length; i++)
{
   for(int j = 0; j < arr[0].length; j++)
   {
      System.out.printf("%s ", arr[i][j]);
   }
   System.out.println();
}

有关各种format specifier的详细信息,请参阅此链接: -

答案 1 :(得分:0)

Java中对printf()类型的引用:http://docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

代码:

    for(int i = 0; i < arr.length; i++) {
       for(int j = 0; j < arr[0].length; j++) {
        //System.out.printf("%s", arr[i][j]);
          System.out.printf("%s ", arr[i][j]);
        //The added space will pad the end after each character
       }
       System.out.println();
       //After each pass printing all the characters of your array,
       //this will add a line return.
    }

答案 2 :(得分:0)

String[][] arr =
    {
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"}
    }

for(int i=0 ; i<arr.length ; i++){

      for(int j=0 ; j<arr.length[i] ; j++){

         System.out.printf("%s ", arr[i][j]);

   }

     System.out.prinln();

}

答案 3 :(得分:0)

现在Java 8已经发布,您可以使用以下内容:

System.out.printf("%s", Grid.print(width, height, this::showCell));

您需要将其添加为单独的格式化程序函数:

public String showCell(Integer x, Integer y) {
    return arr[x][y];
}