将Java文件转换为HTML文件

来源:互联网 发布:网络的安全机制有哪些 编辑:程序博客网 时间:2024/05/16 17:39

项目中碰到的一个小问题,现将解决方法开源,主要由三步组成。废话不多上代码。

1 主函数
static String[] keywordString = {    "abstract", "assert", "boolean",    "break", "byte", "case", "catch", "char", "class", "const",    "continue", "default", "do", "double", "else", "enum",    "extends", "for", "final", "finally", "float", "goto", "if",    "implements", "import", "instanceof", "int", "interface",    "long", "native", "new", "package", "private", "protected",    "public", "return", "short", "static", "strictfp", "super",    "switch", "synchronized", "this", "throw", "throws",    "transient", "try", "void", "volatile", "while",    "true", "false", "null"};static HashSet<String> keywordSet=new HashSet<String>(Arrays.asList(keywordString));public static void main(String[] args) {String filename="C:/Users/Ethan/workspace/Text/tx2.txt";String filename2="C:/Users/Ethan/workspace/Text/javaH.html";try { Scanner input = new Scanner(new File(args[0]));    PrintWriter output = new PrintWriter(new File(args[1]));         JavaToHTML(input, output);} catch (Exception e) {// TODO: handle exceptione.printStackTrace();}}

2 将Java源代码转为HTML
  static void translateToHTML(String text, Scanner input, PrintWriter output) throws Exception {    text = text.replaceAll("// ", "LINECOMMENT");    text = text.replaceAll("/\\*", "BLOCKCOMMENT");    String token;    while (text != null && text.length() > 0) {      // * and / are in conflict with /* and //       String[] parts = text.split("[%\\+\\-\\*/\r\n\t \\[\\].;(){},]", 2);      token = parts[0];      if (token.length() > 1 && token.startsWith("LINECOMMENT")) {        output.format("%s", "<span class = \"comment\">");        parts = text.split("\r\n", 2);        text = parts[1];        output.format("%s", parts[0].replaceAll("LINECOMMENT", "// "));        output.format("%s", "</span>\r\n");        continue;      }      else if (token.length() > 1 && token.startsWith("BLOCKCOMMENT")) {        output.format("%s", "<span class = \"comment\">");        parts = text.split("\\*/", 2);        text = parts[1];        output.format("%s", parts[0].replaceAll("BLOCKCOMMENT", "/*") + "*/");        output.format("%s", "</span>");        continue;      }      else if (token.length() > 1 && token.matches("'\\w'*")) {        output.format("%s", "<span class = \"literal\">");        output.format("%s", token);        output.format("%s", "</span>");      }      else if (token.startsWith("\"") && token.endsWith("\"") &&               (token.length() > 1)) {        output.format("%s", "<span class = \"literal\">" + token                      + "</span>");      }      else if (token.startsWith("'") && token.endsWith("'") &&               (token.length() > 1)) {        output.format("%s", "<span class = \"literal\">" + token                      + "</span>");      }      else if (token.equals("' '")) {        output.format("%s", "<span class = \"literal\">" + token                      + "</span>");      }       else if (token.startsWith("\"") && token.endsWith("\"") &&               (token.length() == 1)) {        if (stringToken) {          output.format("%s", token + "</span>");          stringToken = false;        }        else {          output.format("%s", "<span class = \"literal\">" + token);          stringToken = true;        }      }      else if (token.startsWith("\"")) {        output.format("%s", "<span class = \"literal\">" + token);        stringToken = true;      }      else if (token.endsWith("\"") && (!token.endsWith("\\\""))) {        output.format("%s", token);        output.format("%s", "</span>");        stringToken = false;      }      else if (token.matches("\\d+")) { // Check if numeric        output.format("%s", "<span class = \"literal\">" + token +                      "</span>");      }      else if (!stringToken && keywordSet.contains(token)) {        output.format("%s", "<span class = \"keyword\">" + token +                      "</span>");      }      else {        output.format("%s", token);      }      if (token.length() < text.length()) {        if (text.charAt(token.length()) == '<')           output.format("%s", "<");        else if (text.charAt(token.length()) == '>')          output.format("%s", ">");        else          output.format("%s", text.charAt(token.length()));      }      if (parts.length == 2) {        text = parts[1];      }    }  }

3 代码高亮功能实现与按照HTML格式进行封装
 static boolean stringToken = false; static String inputFileName;  public static void JavaToHTML(Scanner input, PrintWriter output) {    try {      output.format("%s\r\n", "<html>");      output.format("%s\r\n", "<head>");      output.format("%s\r\n",        "<title>Intro to Java Programming, 6E - " + inputFileName +        "</title>");      output.format("%s\r\n",        "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1252\">");      output.format("%s\r\n", "<style type = \"text/css\">");      output.format("%s\r\n",        "body {font-family: \"Courier New\", sans-serif; font-size: 100%; color: black}");      output.format("%s\r\n",        ".keyword {color: #000080; font-weight: bold}");      output.format("%s\r\n", ".comment {color: #008000}");      output.format("%s\r\n", ".literal {color: #0000ff}");      output.format("%s\r\n", ".keyword {color: black; font-weight: bold}");      output.format("%s\r\n", ".comment {color: #77797C}");      output.format("%s\r\n", ".literal {color: #007346; font-weight: bold}");      output.format("%s\r\n", "</style>");      output.format("%s\r\n", "</head>");      output.format("%s\r\n", "<body>");      output.format("%s\r\n", "<pre>");      String text = "";      String temp;      // Read all lines      while (input.hasNext()) {        temp = input.nextLine();        text += temp + "\r\n";      }      text = text.replaceAll(">", ">");      text = text.replaceAll("<", "<");      translateToHTML(text, input, output);      output.format("%s\r\n", "</pre>");      output.format("%s\r\n", "</body>");      output.format("%s\r\n", "</html>");    }    catch (Exception ex) {      System.out.println(ex);    }    finally {      try {        input.close();        output.close();      }      catch (Exception ex) {      }    }  }





原创粉丝点击