Преобразование 2d массива в вид организационной таблицы - PullRequest
0 голосов
/ 12 января 2012

Я преобразовал текстовый файл в 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("");

    }
}

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

Ответы [ 3 ]

1 голос
/ 12 января 2012

попробуйте вывод с использованием printf

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

0 голосов
/ 12 января 2012

Я полагаю, что вы не захотите использовать все эти вещи 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");
    }
}
0 голосов
/ 12 января 2012

Вы можете сделать это следующим образом:

    // 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");
    }

Надеюсь, что это может помочь.

Привет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...