首页 > 解决方案 > 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.
   |+--------------+

标签: javajava.util.scanner

解决方案


  1. 您评论的 for 循环代码非常完美,因为它在右垂直线之前将额外的空白添加到所需的长度。除了您在 for 循环开始之前使用 println 的事实之外,这会导致在下一行中添加空格而不是继续。

  2. 也不要使用顶部和底部两次来打印相同的水平线。您可以使用重用上面创建的行来关闭输入。此外,您可以使用 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);
}

推荐阅读