使用带填充的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 |
+ -------------- + -------------- +
这是我做的改动
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;
}
}