如何确定缩进:将Java源文件转换为HTML文件
我正在尝试使用PrintWriter以编程方式将Java源文件转换为HTML文件,以写入一个单独的.HTML文件 示例源文件可能如下所示。 HelloWorld.java: 我所有的印刷作品都很好,只是我的缩进有问题。一切都是左对齐的 在浏览器中可以看到HelloWorld.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
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(" ");
}
...
我认为这不会有帮助,他正在使用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(" ");
}
...