Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何确定缩进:将Java源文件转换为HTML文件_Java_String_Parsing_Whitespace - Fatal编程技术网

如何确定缩进:将Java源文件转换为HTML文件

如何确定缩进:将Java源文件转换为HTML文件,java,string,parsing,whitespace,Java,String,Parsing,Whitespace,我正在尝试使用PrintWriter以编程方式将Java源文件转换为HTML文件,以写入一个单独的.HTML文件 示例源文件可能如下所示。 HelloWorld.java: 我所有的印刷作品都很好,只是我的缩进有问题。一切都是左对齐的 在浏览器中可以看到HelloWorld.html: public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); wh

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

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

我所有的印刷作品都很好,只是我的缩进有问题。一切都是左对齐的

在浏览器中可以看到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时,它应该得到缩进。我不想手动操作,因为这样我就必须为每个源文件编写不同的程序

注意:我拆分每一行的原因是,该行中可能存在的某些关键字正在努力在html文件中突出显示,正如我在代码中所指出的,我使用了a

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

如何确定哪一行获得缩进,以及缩进量

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

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

使用标记

标记定义预先格式化的文本

元素中的文本通常以固定宽度字体显示 Courier,它同时保留空格和换行符

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

如果您检查StackOverflow中呈现的HTML,并将其标记为代码,您将看到它使用了此标记

您可以使用带有空白的CSS类:pre或pre-line或pre-wrap。 您可以使用计算出的左边距将每行换行。例如,它可能是10px的倍数。这样还可以更改支撑样式。
基本上,您必须保持一个变量,indentLevel。对每个{不在字符串或注释中的}递增,对每个}不在字符串或注释中的}递减。每行缩进,比如说10像素乘以缩进级别。测验你想让续行缩进更多吗?

我想知道我想完成什么

        ...

        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");
        }

        ...

我认为这不会有帮助,他正在使用String.split拆分每行代码以查找关键字,因此缩进空格丢失。我完全理解空白以及如何在HTML中实现它,但我的问题是,如何在编程中确定源代码的哪一行应该得到缩进,当我将其转换为HTML文件时,我之所以拆分是因为我在字符串中的某些关键字中添加了一个空格。这种方法唯一的错误是,我手动插入了空格。我想按程序做。这就是为什么我需要我的程序来确定间距的方向。在您的情况下,我必须手动为每个源文件留出空间。我正在尝试创建一个程序,在这个程序中,我可以向它传递一个源文件,它会自动为我转换它。这不是一件小事,你必须用记号解析你的代码,然后实现所有缩进逻辑以获得所需的格式化规则来打印它。您可以从计算花括号开始:我只需要计算从源文件获得的每一行前面的空白。然后我可以在打印任何其他内容之前将空白打印到html中。但我不知道如何确定有多少空白。这是我真正的问题。我的问题更多的是Java问题,而不是格式问题。我试图让程序确定在将源代码中的哪一行转换为HTML文件时应获得多少缩进。@Eric标记对我有什么作用?标记告诉浏览器尊重空白。CSS属性也做同样的事情,而pre-line和pre-wrap值做的事情稍微复杂一些。见和。
    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();
        ...

        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");
        }

        ...