簡體   English   中英

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 

所有int> = 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”(如庫)(請參閱此處作為起點)。 換句話說:不要像這樣濫用stderr而是要研究獲得對stdout的更多控制的方法。 這樣您就可以在一個控制台 (而不是兩個)上以彩色打印。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM