জাভা এর System.out এ টেবিল বিন্যাসে আউটপুট


91

আমি একটি ডাটাবেস থেকে ফলাফল পাচ্ছি এবং জাভা স্ট্যান্ডার্ড আউটপুট একটি টেবিল হিসাবে তথ্য আউটপুট করতে চাই

আমি using t ব্যবহার করার চেষ্টা করেছি কিন্তু প্রথম কলামটি আমি চাই এটি দৈর্ঘ্যের ক্ষেত্রে খুব পরিবর্তনশীল।

আউটপুট মত একটি দুর্দান্ত টেবিল এ এটি প্রদর্শন করার কোন উপায় আছে?


উত্তর:


145

ব্যবহার System.out.format। আপনি এর মতো ক্ষেত্রগুলির দৈর্ঘ্য সেট করতে পারেন:

System.out.format("%32s%10d%16s", string1, int1, string2);

এই প্যাড string1, int1এবং string232, 10, এবং 16 অক্ষর, যথাক্রমে।

java.util.Formatterসিনট্যাক্স ( অভ্যন্তরীণভাবে System.out.formatব্যবহার করে Formatter) সম্পর্কিত আরও তথ্যের জন্য জাভাডোকগুলি দেখুন ।


4
ধন্যবাদ আমার যা প্রয়োজন! আমি কেবল যুক্ত করব each n প্রতিবার একটি নতুন লাইন তৈরি করার জন্য আমার শেষে put n লাগানোর দরকার ছিল, অন্য কেউ যদি সমস্যাটি পান তার ক্ষেত্রে।
ক্রিস

19
বা, আরও ভাল, %nএটি - এটি স্বয়ংক্রিয়ভাবে সিস্টেমের ডিফল্ট লাইন টার্মিনেটরে অনুবাদ হয়।
মাইকেল ম্যাইইয়ার্স

4
আমি স্ট্রিং টেবিলের বাম প্রান্তিককরণ কিভাবে করতে পারি?
মাইক

16
বাম সারিবদ্ধ: System.out.format ("% - 2s% 10d% -16s", স্ট্রিং 1, ইনট 1, স্ট্রিং 2);
মাইকে

4
আমি যদি এটি সারিবদ্ধ করতে চাই তবে এটি কীভাবে করবেন?
প্রটন্নাল

36

জে-পাঠ্য-ব্যবহারগুলি ব্যবহার করে আপনি কোনও সারণীকে কনসোল করতে মুদ্রণ করতে পারেন: এখানে চিত্র বর্ণনা লিখুন

এবং এটি এতটা সহজ:

TextTable tt = new TextTable(columnNames, data);                                                         
tt.printTable();   

এপিআইও বাছাই এবং সারি সংখ্যায়ন অনুমতি দেয় ...


4
এটি ব্যবহারে ব্যথার মতো, তবে ক্রমাগত স্ট্রিং ফর্ম্যাটিং সামঞ্জস্য করার চেয়ে এটি দুর্দান্ত। এটি আরও ভাল হতে চাইলে: - উত্স জারটি মাভেন
রেপোতে

15

আমি একটি প্রকল্প তৈরি করেছি যা অনেক উন্নত টেবিল ভিউ তৈরি করতে পারে। আপনি যদি টেবিলটি মুদ্রণ করবেন বলে মনে করেন, সারণির প্রস্থের একটি সীমা থাকবে। গ্রাহকের চালান প্রিন্ট পেতে আমি এটি নিজস্ব প্রকল্পের একটিতে প্রয়োগ করেছি। নীচে মুদ্রণ দর্শন একটি উদাহরণ।

           PLATINUM COMPUTERS(PVT) LTD          
     NO 20/B, Main Street, Kandy, Sri Lanka.    
  Land: 812254630 Mob: 712205220 Fax: 812254639 

                CUSTOMER INVOICE                

+-----------------------+----------------------+
|INFO                   |CUSTOMER              |
+-----------------------+----------------------+
|DATE: 2015-9-8         |ModernTec Distributors|
|TIME: 10:53:AM         |MOB: +94719530398     |
|BILL NO: 12            |ADDRES: No 25, Main St|
|INVOICE NO: 458-80-108 |reet, Kandy.          |
+-----------------------+----------------------+
|                SELLING DETAILS               |
+-----------------+---------+-----+------------+
|ITEM             | PRICE($)|  QTY|       VALUE|
+-----------------+---------+-----+------------+
|Optical mouse    |   120.00|   20|     2400.00|
|Gaming keyboard  |   550.00|   30|    16500.00|
|320GB SATA HDD   |   220.00|   32|     7040.00|
|500GB SATA HDD   |   274.00|   13|     3562.00|
|1TB SATA HDD     |   437.00|   11|     4807.00|
|RE-DVD ROM       |   144.00|   29|     4176.00|
|DDR3 4GB RAM     |   143.00|   13|     1859.00|
|Blu-ray DVD      |    94.00|   28|     2632.00|
|WR-DVD           |   122.00|   34|     4148.00|
|Adapter          |   543.00|   28|    15204.00|
+-----------------+---------+-----+------------+
|               RETURNING DETAILS              |
+-----------------+---------+-----+------------+
|ITEM             | PRICE($)|  QTY|       VALUE|
+-----------------+---------+-----+------------+
|320GB SATA HDD   |   220.00|    4|      880.00|
|WR-DVD           |   122.00|    7|      854.00|
|1TB SATA HDD     |   437.00|    7|     3059.00|
|RE-DVD ROM       |   144.00|    4|      576.00|
|Gaming keyboard  |   550.00|    6|     3300.00|
|DDR3 4GB RAM     |   143.00|    7|     1001.00|
+-----------------+---------+-----+------------+
                              GROSS   59,928.00 
                       DISCOUNT(5%)    2,996.40 
                             RETURN    9,670.00 
                            PAYABLE   47,261.60 
                               CASH   20,000.00 
                             CHEQUE   15,000.00 
                    CREDIT(BALANCE)   12,261.60 






  ---------------------   --------------------- 
     CASH COLLECTOR         GOODS RECEIVED BY   

             soulution by clough.com            

এই উপরে মুদ্রণ দৃশ্য কোড এবং আপনি মধ্যে লাইব্রেরী (Wagu) জানতে পারেন এখানে


4
মিঃ @ ক্লাউ, আমি আপনার উত্তরগুলির সত্যই প্রশংসা করেছি। এটি চালানের উত্সর্গ করার একটি দুর্দান্ত উপায় .. আমি প্রকল্পেও কাজ করছি তবে আমি আমার চালানে ডিটেল বিভাগটি ফেরত দিতে চাই না ... আপনি কি আমাকে এই মাধ্যমে সহায়তা করতে পারেন .. আমি এই বিভাগটি কাটাতে পারছি না
রাফি আব্রো

4
@ এলজেডএইচ - হ্যাঁ, এটি দুর্দান্ত কাজ করে। কিন্তু, আপনি পাঠ্য এলাকা এর টাইপফেস পরিবর্তন করতে হবে মোনোস্পেস
ক্লাব

4
এটি কি মাভেন কেন্দ্রীয় ভান্ডারগুলিতে প্রকাশিত হয়?
হবিবিটাস

4
আপনি কি এটা পরিকল্পনা করেন?
হুবিটাস

4
@ হবিটাস, আসলে আমি এই লাইব্রেরির যুক্তি পুনরায় প্রোগ্রাম করার পরিকল্পনা করছি। এত কিছুর পরেও আমি এই প্রকাশ করব প্রকাশে।
মেঘ

15

উত্তরের জন্য আমার খুব দেরি হতে পারে তবে এখানে একটি সাধারণ এবং জেনেরিক সমাধান

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

public class TableGenerator {

    private int PADDING_SIZE = 2;
    private String NEW_LINE = "\n";
    private String TABLE_JOINT_SYMBOL = "+";
    private String TABLE_V_SPLIT_SYMBOL = "|";
    private String TABLE_H_SPLIT_SYMBOL = "-";

    public String generateTable(List<String> headersList, List<List<String>> rowsList,int... overRiddenHeaderHeight)
    {
        StringBuilder stringBuilder = new StringBuilder();

        int rowHeight = overRiddenHeaderHeight.length > 0 ? overRiddenHeaderHeight[0] : 1; 

        Map<Integer,Integer> columnMaxWidthMapping = getMaximumWidhtofTable(headersList, rowsList);

        stringBuilder.append(NEW_LINE);
        stringBuilder.append(NEW_LINE);
        createRowLine(stringBuilder, headersList.size(), columnMaxWidthMapping);
        stringBuilder.append(NEW_LINE);


        for (int headerIndex = 0; headerIndex < headersList.size(); headerIndex++) {
            fillCell(stringBuilder, headersList.get(headerIndex), headerIndex, columnMaxWidthMapping);
        }

        stringBuilder.append(NEW_LINE);

        createRowLine(stringBuilder, headersList.size(), columnMaxWidthMapping);


        for (List<String> row : rowsList) {

            for (int i = 0; i < rowHeight; i++) {
                stringBuilder.append(NEW_LINE);
            }

            for (int cellIndex = 0; cellIndex < row.size(); cellIndex++) {
                fillCell(stringBuilder, row.get(cellIndex), cellIndex, columnMaxWidthMapping);
            }

        }

        stringBuilder.append(NEW_LINE);
        createRowLine(stringBuilder, headersList.size(), columnMaxWidthMapping);
        stringBuilder.append(NEW_LINE);
        stringBuilder.append(NEW_LINE);

        return stringBuilder.toString();
    }

    private void fillSpace(StringBuilder stringBuilder, int length)
    {
        for (int i = 0; i < length; i++) {
            stringBuilder.append(" ");
        }
    }

    private void createRowLine(StringBuilder stringBuilder,int headersListSize, Map<Integer,Integer> columnMaxWidthMapping)
    {
        for (int i = 0; i < headersListSize; i++) {
            if(i == 0)
            {
                stringBuilder.append(TABLE_JOINT_SYMBOL);   
            }

            for (int j = 0; j < columnMaxWidthMapping.get(i) + PADDING_SIZE * 2 ; j++) {
                stringBuilder.append(TABLE_H_SPLIT_SYMBOL);
            }
            stringBuilder.append(TABLE_JOINT_SYMBOL);
        }
    }


    private Map<Integer,Integer> getMaximumWidhtofTable(List<String> headersList, List<List<String>> rowsList)
    {
        Map<Integer,Integer> columnMaxWidthMapping = new HashMap<>();

        for (int columnIndex = 0; columnIndex < headersList.size(); columnIndex++) {
            columnMaxWidthMapping.put(columnIndex, 0);
        }

        for (int columnIndex = 0; columnIndex < headersList.size(); columnIndex++) {

            if(headersList.get(columnIndex).length() > columnMaxWidthMapping.get(columnIndex))
            {
                columnMaxWidthMapping.put(columnIndex, headersList.get(columnIndex).length());
            }
        }


        for (List<String> row : rowsList) {

            for (int columnIndex = 0; columnIndex < row.size(); columnIndex++) {

                if(row.get(columnIndex).length() > columnMaxWidthMapping.get(columnIndex))
                {
                    columnMaxWidthMapping.put(columnIndex, row.get(columnIndex).length());
                }
            }
        }

        for (int columnIndex = 0; columnIndex < headersList.size(); columnIndex++) {

            if(columnMaxWidthMapping.get(columnIndex) % 2 != 0)
            {
                columnMaxWidthMapping.put(columnIndex, columnMaxWidthMapping.get(columnIndex) + 1);
            }
        }


        return columnMaxWidthMapping;
    }

    private int getOptimumCellPadding(int cellIndex,int datalength,Map<Integer,Integer> columnMaxWidthMapping,int cellPaddingSize)
    {
        if(datalength % 2 != 0)
        {
            datalength++;
        }

        if(datalength < columnMaxWidthMapping.get(cellIndex))
        {
            cellPaddingSize = cellPaddingSize + (columnMaxWidthMapping.get(cellIndex) - datalength) / 2;
        }

        return cellPaddingSize;
    }

    private void fillCell(StringBuilder stringBuilder,String cell,int cellIndex,Map<Integer,Integer> columnMaxWidthMapping)
    {

        int cellPaddingSize = getOptimumCellPadding(cellIndex, cell.length(), columnMaxWidthMapping, PADDING_SIZE);

        if(cellIndex == 0)
        {
            stringBuilder.append(TABLE_V_SPLIT_SYMBOL); 
        }

        fillSpace(stringBuilder, cellPaddingSize);
        stringBuilder.append(cell);
        if(cell.length() % 2 != 0)
        {
            stringBuilder.append(" ");
        }

        fillSpace(stringBuilder, cellPaddingSize);

        stringBuilder.append(TABLE_V_SPLIT_SYMBOL); 

    }

    public static void main(String[] args) {
        TableGenerator tableGenerator = new TableGenerator();

        List<String> headersList = new ArrayList<>(); 
        headersList.add("Id");
        headersList.add("F-Name");
        headersList.add("L-Name");
        headersList.add("Email");

        List<List<String>> rowsList = new ArrayList<>();

        for (int i = 0; i < 5; i++) {
            List<String> row = new ArrayList<>(); 
            row.add(UUID.randomUUID().toString());
            row.add(UUID.randomUUID().toString());
            row.add(UUID.randomUUID().toString());
            row.add(UUID.randomUUID().toString());

            rowsList.add(row);
        }

        System.out.println(tableGenerator.generateTable(headersList, rowsList));
    }
}

এই ধরণের আউটপুট দিয়ে

+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|                   Id                   |                F-Name                  |                 L-Name                 |                  Email                 |
+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+
|  70a56f25-d42a-499c-83ac-50188c45a0ac  |  aa04285e-c135-46e2-9f90-988bf7796cd0  |  ac495ba7-d3c7-463c-8c24-9ffde67324bc  |  f6b5851b-41e0-4a4e-a237-74f8e0bff9ab  |
|  6de181ca-919a-4425-a753-78d2de1038ef  |  c4ba5771-ccee-416e-aebd-ef94b07f4fa2  |  365980cb-e23a-4513-a895-77658f130135  |  69e01da1-078e-4934-afb0-5afd6ee166ac  |
|  f3285f33-5083-4881-a8b4-c8ae10372a6c  |  46df25ed-fa0f-42a4-9181-a0528bc593f6  |  d24016bf-a03f-424d-9a8f-9a7b7388fd85  |  4b976794-aac1-441e-8bd2-78f5ccbbd653  |
|  ab799acb-a582-45e7-ba2f-806948967e6c  |  d019438d-0a75-48bc-977b-9560de4e033e  |  8cb2ad11-978b-4a67-a87e-439d0a21ef99  |  2f2d9a39-9d95-4a5a-993f-ceedd5ff9953  |
|  78a68c0a-a824-42e8-b8a8-3bdd8a89e773  |  0f030c1b-2069-4c1a-bf7d-f23d1e291d2a  |  7f647cb4-a22e-46d2-8c96-0c09981773b1  |  0bc944ef-c1a7-4dd1-9eef-915712035a74  |
+----------------------------------------+----------------------------------------+----------------------------------------+----------------------------------------+

আপনার কেবলমাত্র আমদানিগুলি হ'ল: java.util.HashMap আমদানি করুন; আমদানি java.util.List; আমদানি java.util.Map;
জেক এইচএম

আপনি যদি সত্যিকারের উদাহরণ সহ একটি সার্বজনীন স্থির শূন্যস্থান সরবরাহ করতে পারতেন তবে খারাপ হবে না।
মিমি

4
এই সমাধানটিকে "সরল" বলা যায় না
গৌরাঙ্গ খুরানা

11

এটা দেখ. লেখক একটি সহজ তবে মার্জিত সমাধান সরবরাহ করেন যার জন্য কোনও তৃতীয় পক্ষের লাইব্রেরির প্রয়োজন হয় না। http://www.ksmpartners.com/2013/08/nicely- formattted-tabular-output-in-java/

টেবিল বিল্ডার এবং নমুনা আউটপুট একটি উদাহরণ


এই সমাধানটি আমি খুব ভালভাবে একটি তৃতীয় পক্ষের গ্রন্থাগারটি ব্যবহার করছি: অ্যাপাচি ল্যাং তবে এখনও আমার প্রয়োজনের জন্য সেরা সমাধান। 1+
স্পেনহোয়েট

ইন্টারনেট থেকে স্ট্রে কোড অনুলিপি করা 3 য় পক্ষের লাইব্রেরির চেয়ে কিছুটা খারাপ; এটি এমন একটি লাইব্রেরি যা অন্যেরা পুনরায় ব্যবহারের জন্য প্যাকেজ করতেও বিরক্ত করেনি।
গ্রেগ চাবালা

7

কারণ বেশিরভাগ সমাধানগুলি কিছুটা পুরানো হয়ে গেছে আমি ইতিমধ্যে ম্যাসেভেন ( de.vandermeer:asciitable:0.3.2) এর মধ্যে উপলব্ধ যা মূল্যায়নযোগ্য প্রস্তাবও করতে পারি এবং খুব জটিল কনফিগারেশন তৈরি করতে পারে।

বৈশিষ্ট্য (অফসাইট দ্বারা):

  • নিয়ম এবং সামগ্রী, প্রান্তিককরণ, ফর্ম্যাট, প্যাডিং, মার্জিন এবং ফ্রেমের জন্য কিছু নমনীয়তার সাথে পাঠ্য সারণী:
  • পাঠ্য যুক্ত করুন, প্রায়শই অনেকগুলি বিভিন্ন ফর্ম্যাটে যেমন প্রয়োজন (স্ট্রিং, পাঠ্য প্রদানকারী, সরবরাহকারী সরবরাহ করুন, এসটি, ক্লাস্টার),
  • সমস্ত অতিরিক্ত সাদা স্থান (ট্যাবলেটর, অতিরিক্ত ফাঁকা, গাড়ীর ফেরতের সংযোজন এবং লাইন ফিড) সরিয়ে দেয়,
  • Different টি পৃথক পাঠ্য সারিবদ্ধকরণ: বাম, ডান, কেন্দ্রিক, ন্যায়সঙ্গত, ন্যায়সঙ্গত শেষ লাইন বাম, ন্যায়সঙ্গত শেষ লাইনটি ডান,
  • নমনীয় প্রস্থ, পাঠ্যের জন্য সেট এবং রেন্ডারিংয়ের জন্য বিভিন্ন উপায়ে গণনা করা
  • বাম এবং ডান প্যাডিংয়ের জন্য প্যাডিং অক্ষর (পৃথকভাবে কনফিগারযোগ্য)
  • শীর্ষ এবং নীচের প্যাডিংয়ের জন্য প্যাডিং অক্ষর (পৃথকভাবে কনফিগারযোগ্য)
  • গ্রিড আঁকার জন্য বিভিন্ন বিকল্প
  • বিভিন্ন শৈলীর সাথে বিধিগুলি (ব্যবহৃত গ্রিড থিম দ্বারা সমর্থিত: সাধারণ, হালকা, শক্তিশালী, ভারী)
  • উপরে / নীচে / বাম / একটি ফ্রেমের বাইরে ডানদিকে মার্জিন
  • পরবর্তী প্রক্রিয়ার জন্য উপযুক্ত উত্পন্ন পাঠ্যে অক্ষর রূপান্তর, যেমন ল্যাটেক্স এবং এইচটিএমএল

এবং ব্যবহার এখনও সহজ দেখায়:

AsciiTable at = new AsciiTable();

at.addRule();
at.addRow("row 1 col 1", "row 1 col 2");
at.addRule();
at.addRow("row 2 col 1", "row 2 col 2");
at.addRule();

System.out.println(at.render()); // Finally, print the table to standard out.

4
সুন্দর এবং দস্তাবেজযুক্ত গ্রন্থাগার
ডেভিড লিলজেগ্রেন

5
public class Main {
 public static void main(String args[]) {
   String format = "|%1$-10s|%2$-10s|%3$-20s|\n";
   System.out.format(format, "A", "AA", "AAA");
   System.out.format(format, "B", "", "BBBBB");
   System.out.format(format, "C", "CCCCC", "CCCCCCCC");

   String ex[] = { "E", "EEEEEEEEEE", "E" };

   System.out.format(String.format(format, (Object[]) ex));
 }
}

আকারের ইনপুটটির ভিন্নতা আউটপুটকে প্রভাবিত করে না


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.