扫描文件内容时对注释的处理
扫描文件内容时,一般会无差别的扫描所有内容,如果注释很多的话,会在扫描的结果中加入很多无意义的结果(因为我们不需要修改注释的内容);或者有时候只需要扫描注释的内容来获取一些信息,这个时候非注释的信息就属于干扰信息。这篇帖子就是针对注释进行处理的,但是仅仅以java作为例子。
需要扫描的文件 test.java
//-----------------------------------------------------------------------------
// etsttsttdtfadasfdsfdadfsafs
//-----------------------------------------------------------------------------
package a.b.v.d;
import java.awt.Frame;/*fda/dfa///fdsa/da*/import java.util.List;//import java.util.List;
/**
* fdasdfsaj
* fdsafdsafdsadsafdsa
* fdsadfsafdsafdsafdsa"fdsadfa"
* @author masn
*/
public class Application
{
private static final String s1 = "asdf//fda/dfa///fdsa/da";
private static final String s2 = "asdf/*fda/dfa///fdsa/da";
private static final String s3 = "asdf//fda/dfa*//fdsa/da";/*fdsafdafsa*/
private static final String s4 = "asdf//fda/dfa///fdsa/da";//fdafdsa
private static final String s5 = "asdf//fda/dfa*//fdsa/da";/*fdsafd//afsa*/private static final String s6 = "asdf//fda/dfa*//fdsa/da";//private static final String s7 = "asdf//fda/dfa*//fdsa/da";/*fdsafdafsa*/
public void set/*Appli*/catio/*nId(String id)
{
mId = id;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public String getApplicationId(int a, int b) /*fdasfdsafdsa*/
{
int c = a * b;
int d = a / b;
int re = a + b - a * b % (a / b);//fdsafdafsafdsafsafsf
int re = a + b - a / b % (a * b);
return mId;
}
}
分析逻辑
· java的注释主要有以下两种:
- 以 // 开始的单行注释
- 以 /* 开始,以 */结束的单行或者多行注释。
- 一行代码存在多处注释
· 字符串中的 // 、/、/不能算作注释
· 一行代码中可能存在多处注释(当然,合格的代码是不应该出现这样的问题的,但是谁能保证没有呢?)
· 过滤处理过的新数据仅仅做校验或者规则比对使用,返回结果或者参数传递建议仍使用原始的数据
主函数
public class FileTest {
private boolean isAnnotate = false; //连续多行注释的标识符
public void fileRead() throws IOException {
File file = new File("C:\\Users\\22704\\Desktop\\test.java");
BufferedReader br = new BufferedReader(new FileReader(file));
String str = null;
while ((str = br.