感谢支持
我们一直在努力

过滤掉Java或者C++ 注释

今天需要帮人过滤掉代码中的注释。我又不熟悉脚本语言,走不了捷径,只用用Java写。


就简单的写了一下程序,但是核心功能实现了。


import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;


public class TextFilter {
TextFilter(String fileName) {
   this.fileName = fileName;
}


/**
* 处理文件中的文本
*/
public void process() {
   Scanner scan = null;
   try {
    scan = new Scanner(new File(fileName));
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }


   String strLine = “”;
   while (scan.hasNextLine()) {
    strLine = scan.nextLine();
    StringBuilder strb = new StringBuilder();
  
    //效率方面考虑,先过滤掉空行
    if(strLine.trim().length() == 0)
    {
     continue;
    }
  
    // System.out.println(“—“+strLine);
    int index = -1;
    int endIndex = -1;
    // 1.对第一种注释过滤
    if (!hasPrefix && (index = strLine.indexOf(“//”)) >= 0) {
     if (index > 0) {
      strb.append(strLine.substring(0, index));
     }
    } else if (!hasPrefix && (index = strLine.indexOf(“/*”)) >= 0) {// 2.对第二种注释过滤


     if (index > 0) {
      strb.append(strLine.substring(0, index));
     }
   
     if ((endIndex = strLine.indexOf(“*/”)) >= 0) {
      strb.append(strLine.substring(endIndex + 2));
     } else {//该注释占多行
      hasPrefix=true;
     }
    } else if(hasPrefix && (endIndex = strLine.indexOf(“*/”)) >= 0){
     strb.append(strLine.substring(endIndex + 2));
     hasPrefix = false;
    }else if(!hasPrefix){
     strb.append(strLine);
    }
  
    //output
    if(strb.toString().trim().length()>0 )
    {
     System.out.println(strb);
    }
  
  
   }
}


private String fileName = null;
private boolean hasPrefix = false;


public static void main(String[] args) {
   new TextFilter(“c:\\test.cpp”).process();
}


}



测试了一下。对java和c++都可以。

赞(0) 打赏
转载请注明出处:服务器评测 » 过滤掉Java或者C++ 注释
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏