java - Java - 围绕文件内容打印框
问题描述
我正在尝试使用接受两个参数的方法打印由框包围的文件的内容:一个表示输入文件的扫描仪,以及一个表示该文件中最长输入行的长度的整数。我已经准备好大部分盒子,但不知道如何放置盒子右侧的封闭管。这是我不知道如何解决的一点:
int i = length - line.length();
for (int j = 0; j <= i; j++) {
System.out.print(" ");
}
System.out.print("|"); */
这是我正在使用的方法:
public static void printBox(Scanner input, int length) {
int top = 0;
int bottom = 0;
System.out.print("+");
while (top < length + 2) {
System.out.print("-");
top++;
}
System.out.print("+");
System.out.println();
while (input.hasNextLine()) {
String line = input.nextLine();
System.out.println("| " + line);
/* int i = length - line.length();
for (int j = 0; j <= i; j++) {
System.out.print(" ");
}
System.out.print("|"); */
}
System.out.print("+");
while (bottom < length + 2) {
System.out.print("-");
bottom++;
}
System.out.print("+");
}
这是一个测试用例
printBox(new Scanner("This is some\ntext here."), 12);
没有 for 循环,我得到以下内容。
+--------------+
| This is some
| text here.
+--------------+
这与 for 循环
+--------------+
| This is some
|| text here.
|+--------------+
解决方案
您评论的 for 循环代码非常完美,因为它在右垂直线之前将额外的空白添加到所需的长度。除了您在 for 循环开始之前使用 println 的事实之外,这会导致在下一行中添加空格而不是继续。
也不要使用顶部和底部两次来打印相同的水平线。您可以使用重用上面创建的行来关闭输入。此外,您可以使用 StringBuilder 而不是使用过多的 Sysout 和字符串连接,因为这不是内存/空间效率。
以下是包含上述所有建议的优化代码。
public static void printBox(Scanner input, int length) {
int top = 0;
StringBuilder line = new StringBuilder();
line.append('+');
while (top < length + 2) {
line.append("-");
top++;
}
line.append("+");
System.out.println(line);
while (input.hasNextLine()) {
String innerLineStr = input.nextLine();
StringBuilder innerline = new StringBuilder(innerLineStr);
innerline.insert(0,"| ");
int i = length - innerLineStr.length();
for (int j = 0; j <= i; j++) {
innerline.append(" ");
}
innerline.append("|");
System.out.println(innerline);
}
System.out.println(line);
}
推荐阅读
- powershell - 在 Powershell 中从 PC 名称获取 UPN
- linux - 如何在树莓派上成功运行 valgrind(callgrind)?
- attributes - 如何在 Magento 2 中同步两个产品属性?
- excel - 查找功能未按预期在所有工作表中工作
- ios - 使用 UICollectionLayoutListConfiguration 的特定部分的部分标题
- javascript - How Can I get element from <> (td tag's child) in JavaScript DOM
- python - 如何编写路由以使用 Flask 接收内容安全策略报告而不会收到 400 Bad Request 错误(flask_wtf.csrf.CSRFError)?
- swift - SwiftUI:调用-StateObject 中缺少参数
- ios - React-native View-pager setPage 在 iOS 上不起作用
- javascript - Javascript - 替换表达式不起作用