问题场景
在用JCommander维护命令行客户端时,需要列出所有命令。有两种方案可以解决:
- 固定一个列,横着打印
- 固定一个行,竖着打印
代码
/**
* 竖着打印字符串
* @param row 指定的行数
* @param string 要打印的字符串
*/
public static void printColumn(int row, String string) {
String[] arrSubCommands = string.split(" ");
Arrays.sort(arrSubCommands);
int length = arrSubCommands.length;
if (length <= row) {
for (String arrSubCommand : arrSubCommands) {
System.out.println(arrSubCommand);
}
} else {
int column = length / row + 1; //列数
for (int i = 0; i < row; i++) { //行数
StringBuilder sb = new StringBuilder();
int printNum = i % row + (i / row) * row;
for (int j = 0; j < column; j++) {
if (printNum < length) {
sb.append(arrSubCommands[printNum]).append('@');
}
printNum += row;
}
String[] printArr = sb.toString().split("@");
for (String arg : printArr) {
System.out.print("\t");
System.out.print(String.format("%-12s\t", arg));
}
System.out.println();
}
}
}
/**
* 横着打印字符串
* @param column 指定的列数
* @param string 要打印的字符串
*/
public static void printRow(int column, String string) {
String[] arrSubCommands = string.split(" ");
Arrays.sort(arrSubCommands);
int length = arrSubCommands.length;
for (int i = 0; i < length; i++) {
System.out.print("\t");
System.out.print(String.format("%-12s\t", arrSubCommands[i]));
if ((i + 1) % column == 0) {
System.out.println();
}
}
}
public static void main(String[] args) {
String string = "a d f k o c e p s q";
System.out.println("--------------------------------竖着打印--------------------------------");
printColumn(3, string);
System.out.println("--------------------------------横着打印--------------------------------");
printRow(3, string);
}