通过移除空行和注释来压缩 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 < 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代码实例分享的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

java 代码压缩javascript_通过Java压缩JavaScript代码实例分享相关推荐

  1. java 代码压缩javascript_利用Java来压缩 JavaScript 代码详解

    通过移除空行和注释来压缩 JavaScript 代码 /** * This file is part of the Echo Web Application Framework (hereinafte ...

  2. java如何调用网页_如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码...

    1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: android:layout_width="fill_parent" ...

  3. 【Java脚本引擎】脚本引擎执行JavaScript代码

    应用场景 公司有30员工,每个人工资计算方式不同.现在需要计算工资. 传统的方法:一个接口,30个实现类. 使用脚本引擎:编写一个xml文件,每人一个计算公式,使用的时候可以把公式加载到程序中,启动时 ...

  4. javascript代码_15个最好用的JavaScript代码压缩工具

    JavaScript 代码压缩是指去除源代码里的所有不必要的字符,而不改变其功能的过程.这些不必要的字符通常包括空格字符,换行字符,注释以及块分隔符等用来增加可读性的代码,但并不需要它来执行. 在这篇 ...

  5. Angular Component代码和编译后生成的JavaScript代码

    从 TypeScript 转换为 JavaScript 在这里称为编译. 在这种情况下,compiling 并不意味着创建二进制代码. 对于这种翻译,使用术语 transpilation 而不是 co ...

  6. Angular Component TypeScript代码和最后转换生成的JavaScript代码比较

    TypeScript代码使用@Component定义一个Component: @Component({selector: 'app-shipping',templateUrl: './shipping ...

  7. php运行js代码,如何在PHP中运行JavaScript代码?(代码示例)

    JavaScript是客户端脚本语言,PHP是用于与数据库交互的服务器端脚本语言.那么如何如何在PHP中运行JavaScript?本篇文章就来给大家介绍几种在PHP中运行JavaScript的方法,希 ...

  8. php中调用代码,如何在php中调用javascript代码?

    JavaScript是客户端脚本语言,PHP是用于与数据库交互的服务器端脚本语言.那么如何在php中调用javascript代码?下面本篇文章给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下 ...

  9. html小游戏代码_厉害!84 行 JavaScript 代码实现塔式堆叠游戏

    作者 | 李雪敬出品 | 程序人生(coder_life) 塔式堆叠小游戏游戏玩法想必大家对这个小游戏都挺熟悉的.这个游戏的重点是把尽可能多的盒子叠在一起.当你点击屏幕时,位于上方正在移动的盒子会往下 ...

最新文章

  1. G20国家科技竞争力大盘点,中国科研创新表现突出,人工智能变道超车
  2. Community Server :: Forums
  3. 吴渴楨 160809206
  4. 避免图像去雾算法中让天空部分出现过增强的一种简易方法
  5. 从0 开始 WPF MVVM 企业级框架实现与说明 ---- 第五讲 WPF中 Style
  6. POI异步导入Excel兼容xsl和xlsx
  7. hashmap应用场景_京东4面(Java研发):事务隔离+乐观锁+HashMap+秒杀设计+微服务
  8. ubuntu列出所有磁盘_列出Ubuntu上的磁盘空间使用情况
  9. 提升你的开发效率,10 个 NPM 使用技巧
  10. 结构体02:结构体数组
  11. ArcGIS10.2不能打开10.6版本创建的镶嵌数据集
  12. proguard 反编译_Android Studio项目结构,编译器,ProGuard
  13. 【MTSP】基于matlab遗传算法求解多旅行商问题【含Matlab源码 1338期】
  14. 华人AI学者大盘点:清华培养了最多的高层次人才,韩家炜、吴恩达论文被引数“登顶”
  15. 【Pyecharts50例】GEO航线图/lines
  16. 基于java语言的C/S模式网络聊天室软件
  17. 手机文字识别工具,帮你快速复制图片上的文字
  18. uva10246- Asterix and Obelix
  19. 在鹅厂如何带薪刷视频?
  20. foo,bar,baz

热门文章

  1. SSM中使用注解方式调用输入输出参数存储过程,输入参数为javabean方式,Boolean类型对应TINYINT类型
  2. if sql语句_SQL IF语句介绍和概述
  3. sql 时态表的意义_SQL Server 2016中的时态表的概念和基础
  4. PHPSHE 1.7前台SQL注入漏洞分析
  5. Leetcode 509. Fibonacci Number
  6. 读书笔记——《沉思录》(1/4)
  7. HTML img 标签的 border 属性
  8. 循环c语言格式,关于for循环的格式
  9. Hdoj 2563.统计问题 题解
  10. 001 python接口 get请求