2012-01-12 72 views
0

我已經將txt文件轉換爲2d數組,我怎樣才能讓它看起來更加整齊?將2d數組轉換爲組織表外觀

我的輸入文件是這樣的:

 
[Name], Exam1, Exam2, Exam3 
John, 99, 88, 89 
May, 99, 100, 100 
Mary, 100, 100, 100 
Peter, 60, 60, 60 

目前我得到:

 
[Name] Exam1 Exam2 Exam3 
John 99 88 89 
May 99 100 100 
Mary 100 100 100 
Peter 60 60 60 

我想要的數據看起來更像是一個表,它是更容易閱讀,我該怎麼辦呢?

代碼:

public static void main(String[] args) throws Exception{ 
    File file = new File("test.txt"); 
    BufferedReader br = new BufferedReader(new FileReader(file)); 
    int width = 0, height = 0; 
    String line = ""; 

    /*Find number of row and column of the file.*/ 
    while ((line = br.readLine()) != null) 
    { 
       if (width == 0) 
       { 
        /*Find the number of row using split method(",")*/ 
        String[] str = line.split(","); 
        width = str.length; 
       } 
     height++; 
    } 
    System.out.println("Row : " + height); 
    System.out.println("Column : " + width); 

    /*Adding values to the 2D Array.*/ 
    String[][] data = new String[height][width]; 
    br = new BufferedReader(new FileReader(file)); 

    for (int i = 0; i < height; i++) 
    { 
     if ((line = br.readLine()) != null) 
     { 
      for (int j = 0; j < width; j++) 
      {         
       String[] str = line.split(",");  
       data[i][j] = str[j]; 

       System.out.print(data[i][j] + " "); 
      } 

     } 

     System.out.println(""); 

    } 
} 

非常感謝你。用printf

,或者您可以使用格式化

回答

1

嘗試輸出:

// To Store and Show Values on the screen. 
    int columnWidth = 15; 

    for (int i = 0; i < height; i++) 
    { 
     if ((line = br.readLine()) != null) 
     { 
      // After reading, we are seperating them. 
      String[] str = line.split(", "); 
      for (int j = 0; j < width; j++) 
      {               
       data[i][j] = str[j]; 
       // Here we are making the word length of each String equal, 
       // i.e. equal to column width. So that each String value comes 
       // below each other. Increase the value of columnWidth variable 
       // if you want to increase the width of a column or vice versa. 
       System.out.format("%-" + columnWidth + "s", data[i][j]); 
      } 
     } 
     System.out.print("\n"); 
    } 

希望這可以幫助。

問候

+0

謝謝回答。我是新來的java,在哪裏以及如何使用printf/Formatter?非常感謝。 – 2012-01-12 17:27:03

+0

沒有問題 這裏是一個鏈接到api格式化程序:http://docs.oracle.com/javase/1.5.0/docs/api/java/util/Formatter.html 至於printf,我不認爲api談論太多的用法。這裏是一個例子:http://www.java2s.com/Code/JavaAPI/java.lang/SystemoutprintfsssnStringstr1Stringstr2Stringstr3.htm 如果你是java新手,你最好的朋友是api文檔和源代碼。 :) – ligerdave 2012-01-12 18:48:51

0

你能做到這樣,這是如下

+0

謝謝,它的工作原理。但有時候,如果這個詞太長,它會比其他看起來不整潔的差距更大,我該如何解決?非常感謝。 – 2012-01-13 02:53:23

+0

@BensonLeung:根據您的喜好,增加或減少columnWidth的值,以適應列中的值。如果您希望列寬,請增加它;如果您希望列縮小,請增加它。 Regards – 2012-01-13 05:37:58

+0

@BensonLeung:現在我已經完成了所需的更改,現在就試試。問候 – 2012-01-13 06:59:31

0

我想,你不會希望在你的產品所有的System.out的東西,但我會在示例中使用它,建立在你來告訴你,你需要做的基本步驟。

基本上,您需要對數據進行兩次傳遞。第一遍你應該計算最寬的一行數據,所以你可以製作你的----行。然後,將此類添加到您正在構建的任何輸出類型(這裏是System.out),然後再次遍歷數據並將其添加到輸出。你應該添加一些像換行符或其他終結符的東西。如果你想排列列,你可以做同樣的事情,但是在第一步中,還要在另一個多維數組中記錄每列中最寬的數據,填充數據的長度要小於輸出時每列中最寬的數據改變你的---行的寬度,所以你需要在構建該行之前進行計算)。

這裏就是你們的榜樣修改一點點有一些想法(不填充到,雖然排隊列,這是爲你做,很容易信任我)

public static void main(String[] args) throws Exception { 

    /* Adding values to the 2D Array. */ 

    String[][] data = { { "John", "99", "88", "89" }, 
      { "May", "99", "100", "100" } }; 

    int wideRowWidth = 0; 
    int curRowWidth; 

    // WALK DATA ONCE TO FIND THE WIDEST ROW 
    for (int i = 0; i < data.length; i++) { 
     curRowWidth = 0; 
     for (int j = 0; j < data[i].length; j++) { 
      curRowWidth += data[i][j].length(); 
     } 
     if (curRowWidth > wideRowWidth) { 
      wideRowWidth = curRowWidth; 
     } 

    } 

    // BUILD YOUR DASHED LINE 
    for (int i = 0; i < wideRowWidth + data[0].length -1; i++) { 
      System.out.print("-"); 
    } 
    System.out.print("\n"); 

    // USE YOUR DATA 
    for (int i = 0; i < data.length; i++) { 
     for (int j = 0; j < data[i].length; j++) { 
      System.out.print(data[i][j] + " "); 
     } 
     System.out.print("\n"); 
    } 
}