这篇文章主要讲解了Java压缩javascript代码实例,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。通过移除空行和注释来压缩 JavaScript 代码public class JavaScriptComp
这篇文章主要讲解了Java压缩javascript代码实例,内容清晰明了,对此有兴趣的小伙伴可以学习一下,相信大家阅读完之后会有帮助。
通过移除空行和注释来压缩 JavaScript 代码
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\';public static String compress(String script) {JavaScriptCompressor jsc = new JavaScriptCompressor(script);return jsc.outputBuffer.toString();}private String script;private StringBuffer outputBuffer;private int pos;private char ch;private char lastAppend;private Boolean endReached;private Boolean contentAppendedAfterLastIdentifier = true;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 whitespaceskipWhiteSpace();} 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(); } } } private void append(char ch) { lastAppend = ch; outputBuffer.append(ch); contentAppendedAfterLastIdentifier = true; } private boolean isWhitespace() { return ch == CARRIAGE_RETURN || ch == SPACE || ch == TAB || ch == LINE_FEED; } private void nextChar() { if (!endReached) { if (pos < script.length()) { ch = script.charAt(pos++); } else { endReached = true; ch = 0; } } } private void renderIdentifier() { if (!contentAppendedAfterLastIdentifier) append(SPACE); append(ch); nextChar(); while (Character.isJavaIdentifierPart(ch)) { append(ch); nextChar(); } contentAppendedAfterLastIdentifier = false; } private void renderString() { char startCh = ch; // Save quote char append(ch); nextChar(); while (true) { if ((ch == LINE_FEED) || (ch == CARRIAGE_RETURN) || (endReached)) { // JavaScript error: string not terminated return; } else { if (ch == \'\\\\\') { append(ch); nextChar(); if ((ch == LINE_FEED) || (ch == CARRIAGE_RETURN) || (endReached)) { // JavaScript error: string not terminated return; } append(ch); nextChar(); } else { append(ch); if (ch == startCh) { nextChar(); return; } nextChar(); } } } } private void skipLineComment() { while ((ch != CARRIAGE_RETURN) && (ch != LINE_FEED)) { if (endReached) { return; } nextChar(); } } private void skipBlockComment() { while (true) { if (endReached) { return; } if (ch == \'*\') { nextChar(); if (ch == \'/\') { nextChar(); return; } } else nextChar(); } } private void renderNewLine() { if (lastAppend != \'\\n\' && lastAppend != \'\\r\') { append(\'\\n\'); } } private void skipWhiteSpace() { if (ch == LINE_FEED || ch == CARRIAGE_RETURN) { renderNewLine(); } else { append(ch); } nextChar(); while (ch == LINE_FEED || ch == CARRIAGE_RETURN || ch == SPACE || ch == TAB) { if (ch == LINE_FEED || ch == CARRIAGE_RETURN) { renderNewLine(); } nextChar(); } }}
--结束END--
本文标题: Java压缩JavaScript代码实例
本文链接: https://www.lsjlt.com/news/220506.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
2024-05-05
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0