我有一个包含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");
}
}
答案 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。
我没有遇到第三方库方法来执行此操作。
我认为您当前的方法是最好的方法...编写自己的方法来满足您自己的(特殊)格式要求。 (使用正则表达式来重新格式化一个字符串对我来说有点过于讨厌......)