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

是否可以格式化标准java列表输出?,java,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] 他们是我在研究中没有找到的prin

我有一个包含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]
他们是我在研究中没有找到的printf或format方法来获得所需的每行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");
                      }
                }

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

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

您可以使用如下递归解决方案,您会注意到第二个printList调用第一个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);
}
他们是我在研究中没有找到的printf或format方法来获得所需的每行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");
                      }
                }
标准Java库中没有一个。阿法克

我也没有遇到第三方库方法来实现这一点


我认为你目前的方法是最好的。。。编写自己的方法以满足自己的特殊格式要求。使用正则表达式重新格式化字符串对我来说有点太粗糙了…

这是可能的,但您尝试了什么?这是一个需要包含在内置函数中的特定问题,您不认为吗?您为什么要反循环?@Sanchit请参阅上面的代码,而不是反循环。只是寻求更高效和不同的做事方式。不同,当然。更有效率/更有效率?我不知道。回答得很好,波希米亚人!关于regex,我有很多要学习的地方。我很感谢您分享您的知识。@Pshemo-thx-没有注意到缺少逗号。我基本上提出了您的正则表达式,除了\s不需要,因为它总是一个空格,而且后面从来没有逗号,所以可选?对于尾随空间,不需要