eclipse 删除 java 注释_Java文件删除所有注释 工具+eclipse批量替换(亲测好使)

最近有个项目要申请著作权,令人比较纠结的是需要提交部分源代码,还必须删除所有注释,变态阿。

百度一阵,好多工具不好使。但是太懒的我还是用工具给整的,不然要死人了。先粘上来工具吧

http://sunbin.iteye.com/blog/1735903

源代码:

工具

import java.io.BufferedReader;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.UnsupportedEncodingException;

import java.util.HashMap;

import java.util.Iterator;

import java.util.Map;

import java.util.regex.Matcher;

import java.util.regex.Pattern;

/**

* title: 清除注释

*

* @author Administrator

* @时间 2009-7-30:下午09:28:10

*/

public class ClearComment {

/** 根目录 */

public static String rootDir = "C:\\Documents and Settings\\Administrator\\桌面\\hx\\src\\org\\hi";

//"D:\\testdir

// D:\\workspace\\proj_map\\src\\com

public static void main(String args[]) throws FileNotFoundException,

UnsupportedEncodingException {

deepDir(rootDir);

}

public static void deepDir(String rootDir) throws FileNotFoundException,

UnsupportedEncodingException {

File folder = new File(rootDir);

if (folder.isDirectory()) {

String[] files = folder.list();

for (int i = 0; i < files.length; i++) {

File file = new File(folder, files[i]);

if (file.isDirectory() && file.isHidden() == false) {

System.out.println(file.getPath());

deepDir(file.getPath());

} else if (file.isFile()) {

clearComment(file.getPath());

}

}

} else if (folder.isFile()) {

clearComment(folder.getPath());

}

}

/**

* @param currentDir

* 当前目录

* @param currentFileName

* 当前文件名

* @throws FileNotFoundException

* @throws UnsupportedEncodingException

*/

/**

* @param filePathAndName

* @throws FileNotFoundException

* @throws UnsupportedEncodingException

*/

public static void clearComment(String filePathAndName)

throws FileNotFoundException, UnsupportedEncodingException {

StringBuffer buffer = new StringBuffer();

String line = null; // 用来保存每行读取的内容

InputStream is = new FileInputStream(filePathAndName);

BufferedReader reader = new BufferedReader(new InputStreamReader(is,

"UTF-8"));

try {

line = reader.readLine();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} // 读取第一行

while (line != null) { // 如果 line 为空说明读完了

buffer.append(line); // 将读到的内容添加到 buffer 中

buffer.append("\r\n"); // 添加换行符

try {

line = reader.readLine();

} catch (IOException e) {

e.printStackTrace();

} // 读取下一行

}

// 1、清除单行的注释,如: //某某,正则为 :\/\/.*

// 2、清除单行的注释,如:/** 某某 */,正则为:\/\*\*.*\*\/

// 3、清除单行的注释,如:/* 某某 */,正则为:\/\*.*\*\/

// 4、清除多行的注释,如:

// /* 某某1

// 某某2

// */

// 正则为:.*/\*(.*)\*/.*

// 5、清除多行的注释,如:

// /** 某某1

// 某某2

// */

// 正则为:/\*\*(\s*\*\s*.*\s*?)*

String filecontent = buffer.toString();

Map patterns = new HashMap();

patterns.put("([^:])\\/\\/.*", "$1");// 匹配在非冒号后面的注释,此时就不到再遇到http://

patterns.put("\\s+\\/\\/.*", "");// 匹配“//”前是空白符的注释

patterns.put("^\\/\\/.*", "");

patterns.put("^\\/\\*\\*.*\\*\\/$", "");

patterns.put("\\/\\*.*\\*\\/", "");

patterns.put("/\\*(\\s*\\*\\s*.*\\s*?)*\\*\\/", "");

//patterns.put("/\\*(\\s*\\*?\\s*.*\\s*?)*", "");

Iterator keys = patterns.keySet().iterator();

String key = null, value = "";

while (keys.hasNext()) {

// 经过多次替换

key = keys.next();

value = patterns.get(key);

filecontent = replaceAll(filecontent, key, value);

}

System.out.println(filecontent);

// 再输出到原文件

try {

File f = new File(filePathAndName);

if (!f.getParentFile().exists()) {

f.getParentFile().mkdirs();

}

FileOutputStream out = new FileOutputStream(filePathAndName);

byte[] bytes = filecontent.getBytes("UTF-8");

out.write(bytes);

out.flush();

out.close();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* @param fileContent

* 内容

* @param patternString

* 匹配的正则表达式

* @param replace

* 替换的内容

* @return

*/

public static String replaceAll(String fileContent, String patternString,

String replace) {

String str = "";

Matcher m = null;

Pattern p = null;

try {

p = Pattern.compile(patternString);

m = p.matcher(fileContent);

str = m.replaceAll(replace);

} catch (Exception e) {

e.printStackTrace();

} finally {

m = null;

p = null;

}

// 获得匹配器对象

return str;

}

}

eclipse正则表达式替换

用上面的工具替换完成以后,还是不放心,一个一个打开看了看,果然。有的部分 /*   注释内容 换行  */ 没有删除掉。

想起来eclipse有批量替换的功能。百度了一下 /* ?? */的正则表达式。解决了

新建一个项目aa(名字随便),把要替换的java文件全部粘进去,报错、缺少jar包不用理会。

Ctrl + H ,或者 主菜单的Search -->File.. Containing text输入:

/\*(.|[\r\n])*?\*/

Regular expression(匹配正则表达式):

打上勾。

File name patterns 输入:

*.java

Scope:搜索范围

Working set

:

aa

0818b9ca8b590ca3270a3433284dd417.png

Scope一定不要选择默认的Workspace,不然工作目录全部把注释给干掉了。

新建aa搜索范围的的方法:

Scope --> Working set:  --> Choose... --> New.. -->Resource --> Working set name:输入 aa  ,选中 aa(刚才新建的项目) --> Finish  -->  选中刚才新建的aa名, -->  OK

回到查找窗口,Replace... 弹出Replace Text Matches窗口 --> Preview -->  OK

0818b9ca8b590ca3270a3433284dd417.png

亲测,所有文件的注释都删除掉了。

总结:

eclipse批量替换功能很实用,但是假如都用批量替换 比如万一代码出现了 “//目录”等被错误替换就不好了。

工具不错,再次表示感谢。所以使用工具加eclipse很方便,快捷。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值