Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用带填充的java创建文本文件表_Java_Arrays_Text Files_Padding - Fatal编程技术网

使用带填充的java创建文本文件表

使用带填充的java创建文本文件表,java,arrays,text-files,padding,Java,Arrays,Text Files,Padding,因为我的上一篇文章和问题非常模糊,这里是我现在的来源和一个更清晰的问题。现在一切都是关于填充的 以下是我目前的代码: import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; public class makeTable { static ArrayList<Stri

因为我的上一篇文章和问题非常模糊,这里是我现在的来源和一个更清晰的问题。现在一切都是关于填充的

以下是我目前的代码:

import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;

public class makeTable {


static ArrayList<String> val1 = new ArrayList<>(Arrays.asList("field1", "field1val2", "field1val3"));
static ArrayList<String> val2 = new ArrayList<>(Arrays.asList("field2", "field2val2", "field2val3"));
static int col1=15;
static int col2=15;

public static void main(String arg[]) {

BufferedWriter writeTable = null;
try {
    writeTable = new BufferedWriter(new FileWriter("C:/testtable.txt"));

    //Anfang erste Zeile
    writeTable.write("+ ");
    for (int i = 0; i < col1; i++){
        writeTable.write("-");   
    }
    writeTable.write(" + ");
    for (int i = 0; i < col2; i++){
        writeTable.write("-");   
    }
    writeTable.write(" +");
    writeTable.newLine();
    //Ende erste Zeile

    for (int i = 0; i < val1.size(); i++){
        writeTable.write("| " + val1.get(i) + "   "+ " + " +"   "+ val2.get(i) +  "   "+ " |");
        writeTable.newLine();

        writeTable.write("+ ");
        for (int j = 0; j < col1; j++){
            writeTable.write("-");   
        }
        writeTable.write(" + ");
        for (int m = 0; m < col2; m++){
            writeTable.write("-");   
        }
        writeTable.write(" +");
        writeTable.newLine(); 

    }
} catch (IOException e) {
    System.err.println(e);
} finally {
    if (writeTable != null) {
        try {
            writeTable.close();
        } catch (IOException e) {
            System.err.println(e);
        }
    }
}
}
}
等等。它需要居中。我只能考虑添加像val1.get(I).length()/2这样的内容,这就是要添加的“”的数量。。。。但是我怎么能做到呢


我无法使用其他库(第三方库)。

在下面的代码中,使用
StringBuilder
BufferedWriter
更改
append

public void appendCentered(StringBuilder sb, String s, int width) {
    if (s.length() > width) {
        s = s.substring(0, width);
    }
    int spaces = width - s.length();
    int before = spaces / 2;
    int after = spaces - before; // Could be 1 more than 'before'.
    appendSpaces(sb, before);
    sb.append(s);
    appendSpaces(sb, after);
}

public void appendSpaces(StringBuilder sb, int width) {
    while (width-- > 0) {
        sb.append(' ');
    }
}

以下是我将文本居中后的程序结果

+ -------------- + -------------- +
|     field1     +     field2     |
+ -------------- + -------------- +
|   field1val2   +   field2val2   |
+ -------------- + -------------- +
|   field1val3   +   field2val3   |
+ -------------- + -------------- +
这是我做的改动

  • 我做的最大的一件事就是把你的单片代码分解成方法。通过编写小方法,您可以将较大的任务分解为较小的任务。较小的任务更容易编码

  • 类名以大写字母开头。我将makeTable重命名为makeTable

  • 我将您的代码更改为使用列表接口,而不是ArrayList类。通过使用该接口,将来更容易更改列表的类型。我可以通过更改两行代码来使用LinkedList

  • main方法现在只创建输出。我无法直接写入Windows8.1笔记本电脑上的C驱动器。我必须在与代码相同的目录中创建该文件

  • WritedShedline方法写入一条虚线。我在两个地方使用代码,但是通过将代码放入一个方法中,我只需编写一次代码

  • writeDashes方法写入虚线的虚线部分。同样,我在两个地方使用代码,但是通过将代码放入一个方法中,我只需编写一次代码

  • writeValueLine方法将值写入一行。我只在一个地方使用代码,但为了与writedShedline方法保持一致,我为代码编写了一个方法

  • 其余的方法都是我写的中心文本。首先,我在两个值列表中找到了最长的值。接下来,我添加了4个填充字符。接下来,我通过在字符串的前面和后面添加填充来居中显示文本

  • 研究这些方法,以便将来可以完成此类任务

    这是格式化的代码

    package com.ggl.testing;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class MakeTable {
    
        static List<String> val1 = new ArrayList<>(Arrays.asList("field1",
                "field1val2", "field1val3"));
        static List<String> val2 = new ArrayList<>(Arrays.asList("field2",
                "field2val2", "field2val3"));
    
        static int length = getLongestValue(val1, val2) + 4;
    
        public static void main(String arg[]) {
    
            BufferedWriter writeTable = null;
            try {
                writeTable = new BufferedWriter(new FileWriter("testtable.txt"));
    
                writeDashedLine(writeTable);
                writeTable.newLine();
                // Ende erste Zeile
    
                for (int i = 0; i < val1.size(); i++) {
                    writeValueLine(writeTable, val1.get(i), val2.get(i));
                    writeTable.newLine();
    
                    writeDashedLine(writeTable);
                    writeTable.newLine();
    
                }
            } catch (IOException e) {
                System.err.println(e);
            } finally {
                if (writeTable != null) {
                    try {
                        writeTable.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
                }
            }
        }
    
        public static void writeDashedLine(BufferedWriter writeTable)
                throws IOException {
            // Anfang erste Zeile
            writeTable.write("+ ");
            writeDashes(writeTable);
            writeTable.write(" + ");
            writeDashes(writeTable);
            writeTable.write(" +");
        }
    
        public static void writeDashes(BufferedWriter writeTable)
                throws IOException {
            for (int i = 0; i < length; i++) {
                writeTable.write("-");
            }
        }
    
        public static void writeValueLine(BufferedWriter writeTable, String value1,
                String value2) throws IOException {
            writeTable.write("| " + centerText(value1, length) + " + "
                    + centerText(value2, length) + " |");
        }
    
        public static String centerText(String text, int length) {
            int textLength = text.length();
            if (textLength > length) {
                return text.substring(0, length);
            } else if (textLength == length) {
                return text;
            } else {
                int diff1 = (length - textLength) / 2;
                int diff2 = length - textLength - diff1;
                return getPadding(' ', diff1) + text + getPadding(' ', diff2);
            }
        }
    
        public static String getPadding(char pad, int length) {
            String padding = "";
    
            for (int i = 0; i < length; i++) {
                padding += pad;
            }
    
            return padding;
        }
    
        public static int getLongestValue(List<String> val1, List<String> val2) {
            int length = 0;
    
            for (String s : val1) {
                length = Math.max(length, s.length());
            }
    
            for (String s : val2) {
                length = Math.max(length, s.length());
            }
    
            return length;
        }
    }
    
    package com.ggl.testing;
    导入java.io.BufferedWriter;
    导入java.io.FileWriter;
    导入java.io.IOException;
    导入java.util.ArrayList;
    导入java.util.array;
    导入java.util.List;
    公共类生成表{
    静态列表val1=新的ArrayList(Arrays.asList(“field1”),
    “field1val2”、“field1val3”);
    静态列表val2=新的ArrayList(Arrays.asList(“field2”),
    “field2val2”、“field2val3”);
    静态int-length=getLongestValue(val1,val2)+4;
    公共静态void main(字符串arg[]){
    BufferedWriter writeTable=null;
    试一试{
    writeTable=新的BufferedWriter(新的FileWriter(“testtable.txt”);
    可写数据线(可写);
    writeTable.newLine();
    //恩德·厄斯特·泽勒
    对于(int i=0;i长度){
    返回text.substring(0,长度);
    }else if(textLength==长度){
    返回文本;
    }否则{
    int diff1=(length-textLength)/2;
    int diff2=长度-文本长度-diff1;
    返回getPadding(“”,diff1)+text+getPadding(“”,diff2);
    }
    }
    公共静态字符串getPadding(字符填充,int-length){
    字符串填充=”;
    for(int i=0;i
    您的问题到底是什么?如何写入文件?或者如何获取该模式?主要是如何获取具有值的表的模式。这个小库可能会有所帮助:@Marged assylias在我指定无法使用其他库之前写了这条评论,这就是我添加该问题的原因。
    package com.ggl.testing;
    
    import java.io.BufferedWriter;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class MakeTable {
    
        static List<String> val1 = new ArrayList<>(Arrays.asList("field1",
                "field1val2", "field1val3"));
        static List<String> val2 = new ArrayList<>(Arrays.asList("field2",
                "field2val2", "field2val3"));
    
        static int length = getLongestValue(val1, val2) + 4;
    
        public static void main(String arg[]) {
    
            BufferedWriter writeTable = null;
            try {
                writeTable = new BufferedWriter(new FileWriter("testtable.txt"));
    
                writeDashedLine(writeTable);
                writeTable.newLine();
                // Ende erste Zeile
    
                for (int i = 0; i < val1.size(); i++) {
                    writeValueLine(writeTable, val1.get(i), val2.get(i));
                    writeTable.newLine();
    
                    writeDashedLine(writeTable);
                    writeTable.newLine();
    
                }
            } catch (IOException e) {
                System.err.println(e);
            } finally {
                if (writeTable != null) {
                    try {
                        writeTable.close();
                    } catch (IOException e) {
                        System.err.println(e);
                    }
                }
            }
        }
    
        public static void writeDashedLine(BufferedWriter writeTable)
                throws IOException {
            // Anfang erste Zeile
            writeTable.write("+ ");
            writeDashes(writeTable);
            writeTable.write(" + ");
            writeDashes(writeTable);
            writeTable.write(" +");
        }
    
        public static void writeDashes(BufferedWriter writeTable)
                throws IOException {
            for (int i = 0; i < length; i++) {
                writeTable.write("-");
            }
        }
    
        public static void writeValueLine(BufferedWriter writeTable, String value1,
                String value2) throws IOException {
            writeTable.write("| " + centerText(value1, length) + " + "
                    + centerText(value2, length) + " |");
        }
    
        public static String centerText(String text, int length) {
            int textLength = text.length();
            if (textLength > length) {
                return text.substring(0, length);
            } else if (textLength == length) {
                return text;
            } else {
                int diff1 = (length - textLength) / 2;
                int diff2 = length - textLength - diff1;
                return getPadding(' ', diff1) + text + getPadding(' ', diff2);
            }
        }
    
        public static String getPadding(char pad, int length) {
            String padding = "";
    
            for (int i = 0; i < length; i++) {
                padding += pad;
            }
    
            return padding;
        }
    
        public static int getLongestValue(List<String> val1, List<String> val2) {
            int length = 0;
    
            for (String s : val1) {
                length = Math.max(length, s.length());
            }
    
            for (String s : val2) {
                length = Math.max(length, s.length());
            }
    
            return length;
        }
    }