在 eclipse 的控制台中,如何一个接一个地打印几个东西?



嗯,这是一般的想法。有这个:

Arbol A: 
*3
+2
+-3
+5)
+-3)
+8)
+-1
+4)
+-2
+0)
+1)
Resultado: 
*14
+9
+-1
+5)
+-3)
+8)
+2
+4)
+-1
+0)
+1)

我希望显示的结果是这样的:

Arbol A:                           Resultado: 
*3                                 *14
+2                                 +9
+-3                                +-1      
+5)                                +5)
+-3)                               +-3)
+8)                                +8)
+-1                                +2                       
+4)                                +4)
+-2                                +-1
+0)                               +0)
+1)                               +1)

这只是一个例子,这个想法是显示任何内容,而不会在另一个下面看到结果。也许它很有用,但是,"Arbol A"和"resultado"都是独立的方法。

知道吗?我什么也没找到。

假设您没有其他输出进入 STDOUT,您可以劫持System.out,在其他方法运行时捕获输出,将System.out恢复到正常状态,然后重新格式化捕获的输出并打印出来。

PrintStream original = System.out;
ByteArrayOutputStream buffer = new ByteArrayOutputStream(4096);
PrintStream tempPrinter = new PrintStream(buffer);
System.setOut(tempPrinter);
// call methods that print
tempPrinter.flush();
System.setOut(original);
String output = buffer.toString(); // contains all output, including new lines

我把它留给你格式化并输出到你想要的格式。
你可能会发现for (String line : output.split("\R"))line.endsWith(":")在这方面很有用。

尝试在字符串中使用 \t(制表器(,然后将值和文本元素放在字符串中的正确位置,\t 的工作原理类似于在元素之间放置一个空格,只是它更大,应该让它看起来像结果 2

没有办法像那样打印到控制台。您必须逐行打印。不过,您可以做的是将 2 根字符串切开,然后将它们排列成列,生成一个看起来像有 2 列的字符串。然后,您可以打印字符串。

这意味着必须编辑打印输出的方法,以便它们不打印输出,而是将其输出作为字符串返回。例如,像这样的方法:

public static void print1To10() {
for(int i = 0 ; i < 10 ; i++) {
System.out.println(i);
}
}

需要更改为:

public static String get1To10String() {
StringBuilder sb = new StringBuilder();
for(int i = 0 ; i < 10 ; i++) {
sb.append(i);
sb.append(System.lineSeparator());
}
return sb.toString();
}

现在,您可以编写接受 2 个字符串并将它们排列在列中的方法。这是我写的一篇。它慢,可以改进(也没有测试过边缘情况(,但我不会这样做,因为这只是一个非常粗略的实现,旨在让您了解需要做什么。

// separation is an extra parameter I decide to add in to let the caller specify the distance between the columns.
public static String putSideBySide(String left, String right, int separation) {
StringBuilder sb = new StringBuilder();
String[] leftLines = left.split(System.lineSeparator());
String[] rightLines = right.split(System.lineSeparator());
int maxLeftLength = Arrays.stream(leftLines).mapToInt(String::length).max().orElse(0);
int minLines = Math.min(leftLines.length, rightLines.length);
// for the rows where both the left and right have stuff
for (int i = 0 ; i < minLines ; i++) {
sb.append(leftLines[i]);
for (int j = 0; j < maxLeftLength - leftLines[i].length() + separation; j++) {
sb.append(' ');
}
sb.append(rightLines[i]);
sb.append(System.lineSeparator());
}
if (leftLines.length < rightLines.length) {
// only the right columns
for (int i = 0 ; i < rightLines.length - leftLines.length ; i++) {
for (int j = 0 ; j < maxLeftLength + separation ; j++) {
sb.append(' ');
}
sb.append(rightLines[i + leftLines.length]);
sb.append(System.lineSeparator());
}
} else {
// only the left columns
for (int i = 0 ; i < leftLines.length - rightLines.length ; i++) {
sb.append(leftLines[i + rightLines.length]);
sb.append(System.lineSeparator());
}
}
return sb.toString();
}

用法:

public static void main(String[] args){
System.out.println(putSideBySide(func1(), func2(), 4));
}
public static String func1() {
return "Hello World,n" +
"This is some sample text.n" +
"Testing Testing Testingn" +
"Lorem Ipsum";
}
public static String func2() {
return "This is the right column,n" +
"which is on the right of the left column.n" +
"This columnn" +
"hasn" +
"moren" +
"rows.";
}

输出:

Hello World,                 This is the right column,
This is some sample text.    which is on the right of the left column.
Testing Testing Testing      This column
Lorem Ipsum                  has
more
rows.

最新更新