java画table_画表格 - javawebsoa - 博客园

/*

*

画表格

在图形环境中很容易做出漂亮的表格。但在控制台环境中就比较困难了。

有的时候可以用一些符号大略地模拟:(word文档中可能不整齐,拷贝到记事本中看)

+-------+------+

|abc |xyz=tt|

+-------+------+

|hellomm|t2 |

+-------+------+

本题目要求设计一个程序,把用户输入的内容用这种“准表格”的方式展现出来。具体的要求是:

用户输入的第一行是一个整数,表示接下来有多少行信息。接下来的每行由若干单元组成。单元间用逗号分开。

程序输出:用表格方式重新展现的输入内容。

例如:

用户输入:

3

cat,dog,good-luck

1,2,5

do not use,,that

则程序输出:(word文档中可能不整齐,拷贝到记事本中看)

+----------+---+---------+

|cat |dog|good-luck|

+----------+---+---------+

|1 |2 |5 |

+----------+---+---------+

|do not use| |that |

+----------+---+---------+

从中不难看出:

两个连续的逗号表示中间有一个内容为空的单元

列的数目由最大的单元数的那行决定

列的宽度由同列的最宽的单元决定

单元格中的信息左对齐

可以假设:用户输入的最大行数为30,可能的最多列数为40。

*/

import java.util.Scanner;

public class 画表格 {

// 输出

public static void show(String[][] s,int[] len){

StringBuffer sb = new StringBuffer("+");

for(int i=0;i

for(int j=0;j

sb.append("-");

}

sb.append("+");

}

System.out.println(sb);

for(String[] x:s){

for(String y:x){

System.out.print(y);

}

System.out.println("\n"+sb);

}

}

// 拆分串

public static String[][] splitS(String[] s){

String[][] t = new String[s.length][];

for(int i=0;i

t[i] = s[i].split(","); // 按分隔符拆分

}

return t;

}

// 取得最长的一个数组长度

public static int maxArrLen(String[] s){

String[][] t = splitS(s);

int maxL = 0;

for(String[] x:t){

if(x.length>maxL){

maxL = x.length;

}

}

return maxL;

}

// 得到拆分处理后果的数组

public static String[][] getArr(String[] s,int n){

String[][] ss = new String[n][maxArrLen(s)]; // 拆分串

String[][] t = splitS(s); // 得到临时数组t用来给ss赋值

for(int i=0;i

for(int j=0;j

if(j

ss[i][j] = t[i][j]; // 赋值

}else{

ss[i][j] = ""; // 列数不够,则添空格

}

}

}

return ss;

}

// 得到每列的最长的串的长度

public static void maxLen(String[][] t, int[] len) {

for(int i=0;i

for(int j=0;j

if(t[j][i].length()>len[i]){

len[i] = t[j][i].length(); // 得到每列的最长的串的长度

}

}

}

}

// 填充 "|" 和 " "

public static String fillS(String s,int n,int j,int end){

StringBuffer sb = new StringBuffer();

int x = n-s.length();

//sb.insert(0, '|');

sb.append('|');

sb.append(s);

for(int i=0;i

sb.append(" ");

}

if(j==end){

sb.append("|");

}

return sb.toString();

}

// 补空格和"|"操作

public static void fillSpace(String[][] data,int[] len){

for(int i=0;i

for(int j=0;j

data[i][j] = fillS(data[i][j],len[j],j,data[i].length-1); // 补空格和"|"

}

}

}

public static void f(String[] s,int n){

String[][] data = getArr(s,n); // 得到拆分后的所有数据

int[] len = new int[data[0].length]; // 每列最大宽度

maxLen(data, len); // 为len赋值(每列宽度)

fillSpace(data,len); // 补空格 加"|"

show(data,len); // 输出

}

public static void main(String[] args){

Scanner scan = new Scanner(System.in);

System.out.println("输入的行数(整数)");

int n = scan.nextInt();

scan.nextLine();

String[] s = new String[n];

for(int i=0;i

s[i] = scan.nextLine();

}

f(s,n);

}

}

运行结果:

输入的行数(整数)

3

hua,biao,ge

huabiaoge

hua,biaoge

+---------+------+--+

|hua |biao |ge|

+---------+------+--+

|huabiaoge| | |

+---------+------+--+

|hua |biaoge| |

+---------+------+--+

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值