温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java压缩JavaScript代码实例

发布时间:2020-07-18 13:43:23 来源:亿速云 阅读:243 作者:小猪 栏目:编程语言

这篇文章主要讲解了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 <code>append()</code> * 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 <code>JavaScriptCompressor</code> 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 < script.length()) { ch = script.charAt(pos++); } else { endReached = true; ch = 0; } } } /** * Adds an identifier to output. */ private void renderIdentifier() { if (!contentAppendedAfterLastIdentifier) append(SPACE); append(ch); nextChar(); while (Character.isJavaIdentifierPart(ch)) { append(ch); nextChar(); } contentAppendedAfterLastIdentifier = false; } /** * Adds quoted String starting at current character to output. */ 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(); } } } } /** * Moves cursor past a line comment. */ private void skipLineComment() { while ((ch != CARRIAGE_RETURN) && (ch != LINE_FEED)) { if (endReached) { return; } nextChar(); } } /** * Moves cursor past a block comment. */ private void skipBlockComment() { while (true) { if (endReached) { return; } if (ch == \'*\') { nextChar(); if (ch == \'/\') { nextChar(); return; } } else nextChar(); } } /** * Renders a new line character, provided previously rendered character * is not a newline. */ private void renderNewLine() { if (lastAppend != \'\\n\' && lastAppend != \'\\r\') { append(\'\\n\'); } } /** * Moves cursor past white space (including newlines). */ 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(); } } }

看完上述内容,是不是对Java压缩JavaScript代码实例有进一步的了解,如果还想学习更多内容,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI