一个删除代码注释、空格、换行的工具

今天在群里面一个网友提起说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]);
       
    }

}

 

来自EDSE的创作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值