System.out.println , System.err.println

3

I have this code:

 System.err.print("number of terms =   ");
 System.out.println(allTerms.size());
 System.err.print("number of documents =   ");
 System.out.print("number of documents =   ");

我认为结果应该是这样的:
number of terms = 10
number of documents =1000

但是结果是:
10
1000
number of terms =   number of documents =

为什么会出现这种情况,以及如何解决?


你尝试过使用相同的输出流吗?System.out或System.err。 - user845279
是的,但我需要将一些单词标红,所以我使用了system.err。 - William Kinaan
7个回答

9

流out和err是独立的。

为了获得所需的输出,您必须刷新流或仅使用一个流进行所有输出。


我需要输出为红色,所以我使用了System.err,如何使它变成红色? - William Kinaan
你必须将两个输出写入同一个流中。要么使用 System.err,要么同时使用 System.out - Louis Wasserman
你尝试过在每次调用print后刷新流吗? - Christopher Oezbek

3
为了解决这个问题:
System.out.print("number of terms = ");

System.out.println(allTerms.size());

System.out.print("number of documents = ");

System.out.print("number of documents = ");

System.out.println -> 将输出发送到标准输出流。通常用于监视。

System.err.println -> 将输出发送到标准错误流。通常用于监视。


我需要使用System.err,因为它会给我一个红色的颜色。 - William Kinaan
@WilliamKinaan,那么请使用System.err,但是对于所有的(错误信息)。 - Habib
@WilliamKinaan,或者尝试使用 System.out.println("\u001B31;1mhello world!"); 以红色打印,不过未经测试。 - Habib
1
https://dev59.com/uHM_5IYBdhLWcg3wRw51 - Habib
你尝试过在每次打印调用后刷新流吗? - Seph

3
System.out.print ("He");  
System.out.print ("llo ");  
System.out.println ("World");  

这段代码保证会输出“Hello World”,但是

System.out.print ("He");  
System.err.print ("llo ");  
System.out.println ("World");  

可能会打印 "llo He World" 或者 "HeWorld llo"。它们是两个不同的流。


2

System.err.print()打印到错误输出流,可能不会在控制台中显示。请将它们改为System.out.print()


2

System.err和System.out是两个不同的东西。 使用System.out时,您正在将内容写入标准输出,而使用System.err时,您正在将内容写入标准错误。

尝试将System.err替换为System.out,您会发现问题消失了。

然后您需要进行以下替换:

System.err.print("number of terms = ");

使用

System.out.print("number of terms = ");

要改变println的颜色,请参考以下问题:如何为System.out.println输出设置颜色?


好的,但是如何将 System.out 输出变成红色呢?因为我使用 System.err 只是因为它让输出变成了红色。 - William Kinaan

1
在每个print*语句后,使用相应流的flush方法。这可能会给您所需的输出。
System.err.print("number of terms =   "); System.err.flush();  
System.out.println(allTerms.size()); System.out.flush();  
System.err.print("number of documents =   "); System.err.flush();  
System.out.print( numberOfDocuments ); System.out.flush();  

会导致:

number of terms =   10
number of documents =   1000

希望你正在开发一个控制台应用程序,正如你所期望的那样,err 会以红色打印出来。

0
这可能是原因:errout都有不同的输出流,根据访问控制台的顺序打印。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接