是否可以格式化标准java列表输出?

时间:2013-11-24 05:35:28

标签: java

我有一个包含125个整数的java列表。打印列表时的输出是标准列表输出:[5, 54, 75, ...]。所有整数都打印在一条长线上。我意识到我可以循环并在所需数量的整数后添加\ n。是否可以格式化输出以在列出10个整数后添加换行符,同时保持此标准输出,而不进行循环?

所需的输出风格:

[5, 54, 75, 56, 76, 87, 56, 98, 56, 93  
47, 95, 65, 85, 48, 85, 65, 68, 45, 89  
84, 56, 62]

我的研究中没有找到printfformat方法来获得每行输出所需的10个整数?

               private void printKeywordOccurrences(PrintWriter writer) {
                   for (Map.Entry<String, List<Integer>> entry : keywordMap.entrySet()) {
                       writer.println(entry.getKey() + " =");
                       writer.print("[");

                       List occurrList = entry.getValue();
                       int lastElement = occurrList.size();

                       if (!occurrList.isEmpty()) {

                           for (int i = 0, j = 0; i < (lastElement - 1); i++, j++) {
                               writer.print(occurrList.get(i));
                               writer.print(",");

                               if (j == 10) {
                                   writer.println();
                                   j = 0;

                                   } else {
                                       writer.print(" ");
                                   }

                               writer.print(occurrList.get(lastElement - 1));
                          }
                               writer.println("]\n");
                      }
                }

3 个答案:

答案 0 :(得分:1)

使用正则表达式查找每组10个整数并为其添加换行符:

String formatted = list.toString().replaceAll("((\\d+, ){9}\\d+), ", "$1" + System.lineSeparator());

答案 1 :(得分:0)

你可以使用如下的递归解决方案,你会注意到第二个printList调用第一个。

private static void printList(List<?> al, int index) {
  // Set up an ending condition.
  if (al == null || index >= al.size()) {
    // close brace, print newline.
    System.out.print("]");
    System.out.println();
    return;
  }
  // are we at the first one?
  if (index > 0) {
    if (index % 10 == 0) {
      // interval of ten, new line.
      System.out.println(",");
    } else {
      // just a comma and a space.
      System.out.print(", ");
    }
  } else {
    // we are at the first one, open bracket.
    System.out.print("[");
  }
  // print the list entry
  System.out.print(al.get(index));
  // recurse.
  printList(al, index + 1);
}

// The public method signature.
public static void printList(List<?> al) {
  printList(al, 0);
}

答案 2 :(得分:0)

  

我的研究中没有找到他们的printf或格式方法来获得每行输出所需的10个整数吗?

标准Java库中没有一个。 AFAIK。

我没有遇到第三方库方法来执行此操作。

我认为您当前的方法是最好的方法...编写自己的方法来满足您自己的(特殊)格式要求。 (使用正则表达式来重新格式化一个字符串对我来说有点过于讨厌......)