一个删除代码注释、空格、换行的工具
2010-01-12 21:23
423 查看
今天在群里面一个网友提起说DWR之类的核心JS文件注释和空格占了大部分空间,如果去掉注释可以极大提高网站
的响应速度,正好下午没事,花了一个多小时帮他写了个这样的工具出来,工具虽然简单,但是很实用,贴出来跟大
家分享下。适用于js跟java文件。
public class CompressCode {
private boolean nodeflag=false; //注释flag,初始化为false,没有进入注释区
private int removecount=0;
private boolean strflag=false; //""符号注释
private boolean singlenode=false; //单行注释
public void processCode(String oldfile,String newfile){
try {
BufferedReader reader=new BufferedReader(new FileReader(oldfile));
BufferedWriter writer=new BufferedWriter(new FileWriter(newfile,false));
String recoder=null;
while((recoder=reader.readLine())!=null){
recoder=recoder.trim();
if(recoder.startsWith("//")||recoder.startsWith("/t//"))
continue;
char[] chs=recoder.toCharArray();
processChar(chs);
writer.write(chs, 0,chs.length-removecount);
writer.write(32);
removecount=0;
}
writer.flush();
writer.close();
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void processChar(char[] chs){
for(int i=0;i<chs.length;i++){
//进入注释
if(chs[i]=='/'&&i<chs.length-1&&chs[i+1]=='*'&&!nodeflag&&!singlenode&&!strflag){
removechar(chs,i);
nodeflag=true;
continue;
}
//判断是否计入了“”
if(chs[i]=='"'&&!nodeflag&&!singlenode){
if(!strflag)
strflag=true;
else
strflag=false;
}
//进入单行注释
if(chs[i]=='/'&&i<chs.length-1&&chs[i+1]=='/'&&!strflag&&!nodeflag){
removechar(chs,i);
singlenode=true;
continue;
}
//删除单行注释
if(singlenode){
if(i==chs.length-1){
singlenode=false;
}
removechar(chs,i);
continue;
}
//跳出注释
if(nodeflag&&chs[i]=='*'&&i<chs.length-1&&chs[i+1]=='/'){
removechar(chs,i);
removechar(chs,i+1);
nodeflag=false;
continue;
}
if(nodeflag){
removechar(chs,i);
}else{
if(chs[i]=='/n'){
removechar(chs,i);
}
}
}
}
private void removechar(char[] chs,int rmv_index){
removecount++;
for(int i=rmv_index;i<chs.length-1;i++){
chs[i]=chs[i+1];
}
}
public static void main(String[] args) {
CompressCode compress=new CompressCode();
compress.processCode(args[0],args[1]);
}
}
的响应速度,正好下午没事,花了一个多小时帮他写了个这样的工具出来,工具虽然简单,但是很实用,贴出来跟大
家分享下。适用于js跟java文件。
public class CompressCode {
private boolean nodeflag=false; //注释flag,初始化为false,没有进入注释区
private int removecount=0;
private boolean strflag=false; //""符号注释
private boolean singlenode=false; //单行注释
public void processCode(String oldfile,String newfile){
try {
BufferedReader reader=new BufferedReader(new FileReader(oldfile));
BufferedWriter writer=new BufferedWriter(new FileWriter(newfile,false));
String recoder=null;
while((recoder=reader.readLine())!=null){
recoder=recoder.trim();
if(recoder.startsWith("//")||recoder.startsWith("/t//"))
continue;
char[] chs=recoder.toCharArray();
processChar(chs);
writer.write(chs, 0,chs.length-removecount);
writer.write(32);
removecount=0;
}
writer.flush();
writer.close();
reader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
private void processChar(char[] chs){
for(int i=0;i<chs.length;i++){
//进入注释
if(chs[i]=='/'&&i<chs.length-1&&chs[i+1]=='*'&&!nodeflag&&!singlenode&&!strflag){
removechar(chs,i);
nodeflag=true;
continue;
}
//判断是否计入了“”
if(chs[i]=='"'&&!nodeflag&&!singlenode){
if(!strflag)
strflag=true;
else
strflag=false;
}
//进入单行注释
if(chs[i]=='/'&&i<chs.length-1&&chs[i+1]=='/'&&!strflag&&!nodeflag){
removechar(chs,i);
singlenode=true;
continue;
}
//删除单行注释
if(singlenode){
if(i==chs.length-1){
singlenode=false;
}
removechar(chs,i);
continue;
}
//跳出注释
if(nodeflag&&chs[i]=='*'&&i<chs.length-1&&chs[i+1]=='/'){
removechar(chs,i);
removechar(chs,i+1);
nodeflag=false;
continue;
}
if(nodeflag){
removechar(chs,i);
}else{
if(chs[i]=='/n'){
removechar(chs,i);
}
}
}
}
private void removechar(char[] chs,int rmv_index){
removecount++;
for(int i=rmv_index;i<chs.length-1;i++){
chs[i]=chs[i+1];
}
}
public static void main(String[] args) {
CompressCode compress=new CompressCode();
compress.processCode(args[0],args[1]);
}
}
相关文章推荐
- Java编写去除代码文件中的注释以及空格、换行,并写入目标文件中
- PowerShell中删除空格、点号、减号和换行方法代码实例
- C# 代码文件头部注释批量写入, 函数注释批量删除的工具
- Eclipse删除代码中所有注释及空格
- 实现在一个字符串中删除中文字符及空格的实现代码
- C++和C代码:删除字符串中所有前导空格和所有后导空格,单词之间最多只留一个空格
- 编写代码实现删除一个字符串中连续出现超过一次的空格
- Eclipse删除代码中所有注释及空格
- Java代码 将一个链表中的和已给数字相等的数字删除
- PHP代码加密 -- php_strip_whitespace函数,去掉源代码所有注释和空格并显示在一行
- 删除一个文件夹中所有的文件? 写出代码.
- 编写一个删除C语言程序中所有注释语句的程序
- 基于Visual Studio AddIns(插件)的形式开发的C#及JS的代码注释工具
- 用C语言编写一个去除C代码中所有的注释的部分
- MFC 删除一个文件夹下的所有文件代码
- 正则表达式删除代码的注释
- 【1-23】编写一个删除C语言程序中所有的注释语句。要正确处理带引号的字符串与字符常量。再c语言中,注释不允许嵌套。
- 删除代码中的注释
- 分享一个自己开发的数据字典与动态代码生成工具
- c语言自动删除cpp文件中的注释 使用代码删除注释【Linux、mac下】