2012-01-12 1 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(""); 

    } 
} 

Большое спасибо.

ответ

1

выход попробовать с помощью PRINTF

или вы можете использовать Formatter

+0

Спасибо за ответы. Я новичок в java, где и как использовать printf/Formatter? Большое спасибо. –

+0

без проблем вот ссылка на api Formatter: 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 doc и исходный код. :) – ligerdave

0

Вы можете сделать это таким образом, что выглядит следующим образом:

// 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

Спасибо, он работает. Но когда-то, если слово слишком длинное, оно оставляет больший разрыв, чем другой, который выглядит неопрятным, как я могу его исправить? Большое спасибо. –

+0

@BensonLeung: Увеличьте или уменьшите значение columnWidth, по своему усмотрению, для размещения значений внутри столбца. Увеличьте его, если хотите, чтобы столбец был широким, и уменьшите его, если хотите, чтобы он был узким. С уважением –

+0

@BensonLeung: Теперь я сделал необходимые изменения, попробуйте сейчас. С уважением –

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"); 
    } 
} 
Смежные вопросы