-1

我正在尝试以编程方式将 Java 源文件转换为 HTML 文件,PrintWriter用于写入单独的 .html 文件

示例源文件可能如下所示。
HelloWorld.java:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello World!");

        while (true) {
            System.out.println("Hello World!"); 
            // Disregard this ridiculous example
        }
    }
}

我所有的打印工作都很好,除了我有压痕问题。Everyting 左对齐。

HelloWorld.html(在浏览器中看到):

public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello World!");

while (true) {
System.out.println("Hello World!"); 
// Disregard this ridiculous example
}
}
}

程序源代码片段:我希望这个程序为我确定,在将 java 源代码中的哪一行转换为 HTML 时应该缩进。我不想手动执行,因为那样我就必须为每个源文件编写不同的程序

    PrintWriter output = new PrintWriter(newFile);

    output.print("<!DOCTYPE html><html><head>"
            + "<style>"
            + ".keyword { font-weight: bold; color: blue}"
            + "</style></head><body>");

    while (input.hasNextLine()) {
        String line = input.nextLine();
        String[] tokens = line.split(" ");

        for (int i = 0; i < tokens.length; i++) {
            if (keywordSet.contains(tokens[i])) {
                // Gives Java keyword bold blue font
                output.print("<span class=\"keyword\">");
                output.print(tokens[i] + " ");
                output.print("</span>");
            } else {
                output.print(tokens[i] + " ");
            }
        }
        output.print("<br/>");
    }

    output.print("</body><html>");
    output.close();

注意:我split()每行的原因是因为可能在该行中的某些关键字正在 html 文件中突出显示,我使用 a 执行此操作<span>,如我的代码中所述

在程序源代码中,我显然没有任何缩进的实现,所以我知道为什么我的html文件中没有缩进。我真的不知道如何去实现这个。

我如何确定哪一行得到缩进,以及多少缩进?

编辑: 我的猜测:在拆分之前确定行中有多少空格,将其保存到变量中,然后在打印行中的其他任何内容之前以   的形式打印这些空格。但是我如何确定行首有多少空格?

4

4 回答 4

2
  1. 您可以将 CSS 类与white-space: preorpre-line或一起使用pre-wrap
  2. 您可以<p>用计算的margin-left. 例如,它可能是 的倍数10px。这将使您还可以更改大括号样式。

基本上,您必须保留一个变量indentLevel. 为每个不在字符串或注释中的值增加它,并为每个{不在字符串或注释中的值递减它}。缩进每一行,说10px倍缩进级别。测试; 你想让续行缩进更多吗?

于 2013-10-21T14:33:45.093 回答
1

使用前置标签。

标签定义了预格式化的文本。

元素中的文本以固定宽度字体(通常是 Courier)显示,并且保留空格和换行符。

您不需要确定需要缩进的行,因为pre标记会保留原始 HTML 源代码中的所有空格、回车和换行符。

如果您检查在 StackOverflow 中以标记为代码的内容呈现的 HTML,您将看到它使用了此标记。

于 2013-10-21T14:21:27.937 回答
0

我弄清楚我想要完成什么

        ...

        int whiteSpace = 0;

        while (whiteSpace < line.length() && Character.isWhitespace(line.charAt(j))) {
            whiteSpace++;
        }

        String[] tokens = line.split(" ");

        // Print white space
        for (int i = 0; i < whiteSpace; i++) {
            output.print("&nbsp");
        }

        ...
于 2013-10-21T16:10:10.013 回答
0

也许最好先用你的源代码准备字符串,添加所需的 HTML,然后用&nbsp;. 这可以通过 String.replace() 方法完成 - 遍历您的关键字集并用其包装版本替换所有关键字。然后您将能够将完整的字符串写入您的流中。

于 2013-10-21T14:21:21.140 回答