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 < 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代码实例分享相关推荐
- java 代码压缩javascript_利用Java来压缩 JavaScript 代码详解
通过移除空行和注释来压缩 JavaScript 代码 /** * This file is part of the Echo Web Application Framework (hereinafte ...
- java如何调用网页_如何使用网页开发自己的app,在网页中的按钮与自己的java代码绑定来实现打电话即javascript代码调用java代码,和java代码来调用javascript代码...
1首先是如何在自己的app里用网页显示,这样可以较快的更新界面而不需要让客户端升级,方法如下: xml文件: android:layout_width="fill_parent" ...
- 【Java脚本引擎】脚本引擎执行JavaScript代码
应用场景 公司有30员工,每个人工资计算方式不同.现在需要计算工资. 传统的方法:一个接口,30个实现类. 使用脚本引擎:编写一个xml文件,每人一个计算公式,使用的时候可以把公式加载到程序中,启动时 ...
- javascript代码_15个最好用的JavaScript代码压缩工具
JavaScript 代码压缩是指去除源代码里的所有不必要的字符,而不改变其功能的过程.这些不必要的字符通常包括空格字符,换行字符,注释以及块分隔符等用来增加可读性的代码,但并不需要它来执行. 在这篇 ...
- Angular Component代码和编译后生成的JavaScript代码
从 TypeScript 转换为 JavaScript 在这里称为编译. 在这种情况下,compiling 并不意味着创建二进制代码. 对于这种翻译,使用术语 transpilation 而不是 co ...
- Angular Component TypeScript代码和最后转换生成的JavaScript代码比较
TypeScript代码使用@Component定义一个Component: @Component({selector: 'app-shipping',templateUrl: './shipping ...
- php运行js代码,如何在PHP中运行JavaScript代码?(代码示例)
JavaScript是客户端脚本语言,PHP是用于与数据库交互的服务器端脚本语言.那么如何如何在PHP中运行JavaScript?本篇文章就来给大家介绍几种在PHP中运行JavaScript的方法,希 ...
- php中调用代码,如何在php中调用javascript代码?
JavaScript是客户端脚本语言,PHP是用于与数据库交互的服务器端脚本语言.那么如何在php中调用javascript代码?下面本篇文章给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下 ...
- html小游戏代码_厉害!84 行 JavaScript 代码实现塔式堆叠游戏
作者 | 李雪敬出品 | 程序人生(coder_life) 塔式堆叠小游戏游戏玩法想必大家对这个小游戏都挺熟悉的.这个游戏的重点是把尽可能多的盒子叠在一起.当你点击屏幕时,位于上方正在移动的盒子会往下 ...
最新文章
- G20国家科技竞争力大盘点,中国科研创新表现突出,人工智能变道超车
- Community Server :: Forums
- 吴渴楨 160809206
- 避免图像去雾算法中让天空部分出现过增强的一种简易方法
- 从0 开始 WPF MVVM 企业级框架实现与说明 ---- 第五讲 WPF中 Style
- POI异步导入Excel兼容xsl和xlsx
- hashmap应用场景_京东4面(Java研发):事务隔离+乐观锁+HashMap+秒杀设计+微服务
- ubuntu列出所有磁盘_列出Ubuntu上的磁盘空间使用情况
- 提升你的开发效率,10 个 NPM 使用技巧
- 结构体02:结构体数组
- ArcGIS10.2不能打开10.6版本创建的镶嵌数据集
- proguard 反编译_Android Studio项目结构,编译器,ProGuard
- 【MTSP】基于matlab遗传算法求解多旅行商问题【含Matlab源码 1338期】
- 华人AI学者大盘点:清华培养了最多的高层次人才,韩家炜、吴恩达论文被引数“登顶”
- 【Pyecharts50例】GEO航线图/lines
- 基于java语言的C/S模式网络聊天室软件
- 手机文字识别工具,帮你快速复制图片上的文字
- uva10246- Asterix and Obelix
- 在鹅厂如何带薪刷视频?
- foo,bar,baz
热门文章
- SSM中使用注解方式调用输入输出参数存储过程,输入参数为javabean方式,Boolean类型对应TINYINT类型
- if sql语句_SQL IF语句介绍和概述
- sql 时态表的意义_SQL Server 2016中的时态表的概念和基础
- PHPSHE 1.7前台SQL注入漏洞分析
- Leetcode 509. Fibonacci Number
- 读书笔记——《沉思录》(1/4)
- HTML img 标签的 border 属性
- 循环c语言格式,关于for循环的格式
- Hdoj 2563.统计问题 题解
- 001 python接口 get请求