通过Java压缩JavaScript代码实例分享

这篇文章主要介绍了通过Java压缩JavaScript代码实例分享,具有一定参考价值,需要的朋友可以了解下。

通过移除空行和注释来压缩 JavaScript 代码

/** * This file is part of the Echo Web Application Framework (hereinafter "Echo"). * copyright (C) 2002-2009 NextApp, Inc. * * Compresses a String containing JavaScript by removing comments and whitespace. */ public class JavaScriptCompressor { private static final char LINE_Feed = '\n'; private static final char CARRIAGE_RETURN = '\r'; private static final char SPACE = ' '; private static final char TAB = '\t'; /** * Compresses a String containing JavaScript by removing comments and * whitespace. * * @param script the String to compress * @return a compressed version */ public static String compress(String script) { JavaScriptCompressor jsc = new JavaScriptCompressor(script); return jsc.outputBuffer.toString(); } /** Original JavaScript text. */ private String script; /** * Compressed output buffer. * This buffer may only be modified by invoking the append() * method. */ private StringBuffer outputBuffer; /** Current parser cursor position in original text. */ private int pos; /** Character at parser cursor position. */ private char ch; /** Last character appended to buffer. */ private char lastAppend; /** Flag indicating if end-of-buffer has been reached. */ private Boolean endReached; /** Flag indicating whether content has been appended after last identifier. */ private Boolean contentAppendedAfterLastIdentifier = true; /** * Creates a new JavaScriptCompressor instance. * * @param script */ private JavaScriptCompressor(String script) { this.script = script; outputBuffer = new StringBuffer(script.length()); nextchar(); while (!endReached) { if (Character.isJavaIdentifierStart(ch)) { renderIdentifier(); } else if (ch == ' ') { skipwhiteSpace(); } else if (isWhitespace()) { // Compress whitespace skipwhiteSpace(); } else if ((ch == '"') || (ch == '\'')) { // Handle strings renderString(); } else if (ch == '/') { // Handle comments nextChar(); if (ch == '/') { nextChar(); skipLineComment(); } else if (ch == '*') { nextChar(); skipBlockComment(); } else { append('/'); } } else { append(ch); nextChar(); } } } /** * Append character to output. * * @param ch the character to append */ private void append(char ch) { lastAppend = ch; outputBuffer.append(ch); contentAppendedAfterLastIdentifier = true; } /** * Determines if current character is whitespace. * * @return true if the character is whitespace */ private boolean isWhitespace() { return ch == CARRIAGE_RETURN || ch == SPACE || ch == TAB || ch == LINE_Feed; } /** * Load next character. */ private void nextChar() { if (!endReached) { if (pos

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...