System.err.print 和 System.out.print 的处理差异
Difference in Processing of System.err.print ans System.out.print
执行时 System.err.print 和 System.out.print 的处理方式有区别吗?
我有一个整数的二维数组,范围在 2 到 20 之间。数组打印为矩阵,所有 >=10 的整数都应打印为红色,使用 System.err.print。
如果这样做,输出如下所示:
7 11 15 12 12 12 11 16 17 17 13 4 7
9 8 4
9
9 4 10
12 4 16 12 10
所有 >=10 的整数都是红色的。
而不是像这样
11 7 4 15 7
9 12 8 12 4
9 12 11 16 17
17 9 4 13 10
12 4 16 12 10
没有我想要的红色标记。
两者使用相同的数组,首先使用以下代码打印:
public static void printArray2(int ar[][]) {
if (ar == null)
System.exit(0);
for (int i = 0; i < ar.length; i++) {
for (int j = 0; j < ar[i].length; j++) {
if (ar[i][j] < 10)
System.out.print(" " + ar[i][j] + "\t");
else
System.err.print(" " + ar[i][j] + "\t");
}
System.out.println();
}
}
而第二个输出使用此代码打印
public static void printArray(int ar[][]) {
if (ar == null)
System.exit(0);
for (int i = 0; i < ar.length; i++) {
for (int j = 0; j < ar[i].length; j++) {
if (ar[i][j] < 10)
System.out.print(" " + ar[i][j] + "\t");
else
System.out.print(" " + ar[i][j] + "\t");
}
System.out.println();
}
}
有没有办法在仍然使用 System.err.print 的同时防止未格式化的输出?
基本上这两个流代表 不同的 游戏机。
打印到它们时实际发生的情况可能在很大程度上取决于 JVM 实现或底层操作系统。
从这个意义上说:你真正的问题是你假设你可以像这样使用控制台。
错误控制台的用途是:在那里打印重要的错误消息。作为替代方法 - 检查您是否可以为您的应用程序使用一些 "ncurses" 之类的库(请参阅 here 作为起点)。换句话说:不要像这样误用 stderr - 研究如何获得对 stdout 的更多控制。这样您就可以在一个 console 上进行彩色打印,而不是两个
执行时 System.err.print 和 System.out.print 的处理方式有区别吗? 我有一个整数的二维数组,范围在 2 到 20 之间。数组打印为矩阵,所有 >=10 的整数都应打印为红色,使用 System.err.print。 如果这样做,输出如下所示:
7 11 15 12 12 12 11 16 17 17 13 4 7
9 8 4
9
9 4 10
12 4 16 12 10
所有 >=10 的整数都是红色的。
而不是像这样
11 7 4 15 7
9 12 8 12 4
9 12 11 16 17
17 9 4 13 10
12 4 16 12 10
没有我想要的红色标记。
两者使用相同的数组,首先使用以下代码打印:
public static void printArray2(int ar[][]) {
if (ar == null)
System.exit(0);
for (int i = 0; i < ar.length; i++) {
for (int j = 0; j < ar[i].length; j++) {
if (ar[i][j] < 10)
System.out.print(" " + ar[i][j] + "\t");
else
System.err.print(" " + ar[i][j] + "\t");
}
System.out.println();
}
}
而第二个输出使用此代码打印
public static void printArray(int ar[][]) {
if (ar == null)
System.exit(0);
for (int i = 0; i < ar.length; i++) {
for (int j = 0; j < ar[i].length; j++) {
if (ar[i][j] < 10)
System.out.print(" " + ar[i][j] + "\t");
else
System.out.print(" " + ar[i][j] + "\t");
}
System.out.println();
}
}
有没有办法在仍然使用 System.err.print 的同时防止未格式化的输出?
基本上这两个流代表 不同的 游戏机。
打印到它们时实际发生的情况可能在很大程度上取决于 JVM 实现或底层操作系统。
从这个意义上说:你真正的问题是你假设你可以像这样使用控制台。
错误控制台的用途是:在那里打印重要的错误消息。作为替代方法 - 检查您是否可以为您的应用程序使用一些 "ncurses" 之类的库(请参阅 here 作为起点)。换句话说:不要像这样误用 stderr - 研究如何获得对 stdout 的更多控制。这样您就可以在一个 console 上进行彩色打印,而不是两个