上午写的那篇去除Main方法由于本人考虑欠缺,以为一个Java类里面只有一个Main方法,没有考虑到被注释的Main方法,所以可能导致去除的是被注释的Main方法,下午,重新写了个,代码和上午的差不多,主要是把处理逻辑放在了while循环中。
代码如下:
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class 删除全部Main方法 {
public static void main(String[] args) throws Exception {
删除全部Main方法 t = new 删除全部Main方法();
String content = t.getFileContent("F:/saveFile/tmp/c/SimpleTest.java",
"utf-8");
String result = t.delMainMethod(content);
t.writeStrToFile(result, "F:/saveFile/tmp/c/SimpleTest.java", "utf-8");
}
public String delMainMethod(String content) {
int mainStart = -1;
int checkStart = -1;
String tmpStr= null;
String tmpContent = new String(content);
StringBuffer tmpBuffer = new StringBuffer(5120);
boolean flag=false;
// 得到真正的main方法
while ((mainStart = tmpContent.lastIndexOf("main")) != -1) {
tmpStr = new String(tmpContent.substring(mainStart));
checkStart = tmpStr.indexOf(")");
tmpStr = new String(tmpContent.substring(mainStart - 1, mainStart
+ checkStart + 1));
tmpStr = tmpStr.replaceAll("#_end_#", "\n");
tmpStr = tmpStr.replaceAll("\\n", "");
tmpStr = tmpStr.replaceAll("\\s+", "");
if (tmpStr.startsWith("main(String") && (tmpStr.indexOf(",") == -1)) {
tmpContent=new String(processMain(tmpContent,mainStart));
flag=true;
}else{
//截取前半部分,后半部分丢弃,所以要保留下来
tmpBuffer.insert(0,new String(tmpContent.substring(mainStart)));
tmpContent = new String(tmpContent.substring(0, mainStart));
}
}
if (!flag) {
// 去掉多余空白行
content = new String(content.replaceAll("#_end_#", "\r\n"));
content = new String(content.replaceAll("\\s{2,}\\r\\n", "\r\n"));
return content;
}
tmpBuffer.insert(0,tmpContent);
tmpContent=null;
tmpContent=tmpBuffer.toString();
// 去掉多余空白行
tmpContent = new String(tmpContent.replaceAll("#_end_#", "\r\n"));
//去掉///* * */
tmpContent = new String(tmpContent.replaceAll("/\\*(\\s*\\*\\s*\\s*?)*\\*\\/", ""));
//去掉/* */
tmpContent = new String(tmpContent.replaceAll("\\/\\*\\s*\\*\\/", ""));
tmpContent = new String(tmpContent.replaceAll("\\s{2,}\\r\\n", "\r\n"));
return tmpContent;
}
public String processMain(String content, int mainStart) {
int publicStart = -1;
String tmp = null;
String tmp2=new String(content);
if (mainStart != -1) {
tmp = new String(tmp2.substring(0, mainStart));
// 得到main方法的开始位置
publicStart = tmp.lastIndexOf("public");
}
if (publicStart != -1) {
tmp = new String(tmp2.substring(mainStart));
}
// 得到main方法的结束位置
char[] tmpChar = tmp.toCharArray();
int bracketStart = 0, bracketEnd = 0;
for (int i = 0, len = tmpChar.length; i < len; i++) {
if (tmpChar[i] == '{') {
bracketStart++;
} else if (tmpChar[i] == '}') {
bracketEnd = i;
bracketStart--;
}
if (i != 0 && bracketStart == 0 && bracketEnd != 0) {
break;
}
}
StringBuffer contentBuffer = new StringBuffer(5120);
// 截取字符串
contentBuffer.append(content.substring(0, publicStart)).append(
content.substring(mainStart + bracketEnd + 1));
return contentBuffer.toString();
}
public String getFileContent(String fileName, String chartSet)
throws Exception {
if (chartSet == null) {
chartSet = "utf-8";
}
StringBuffer buffer = new StringBuffer(5120);
String line = null;
InputStream is = new FileInputStream(fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(is,
chartSet));
while ((line = reader.readLine()) != null) {
buffer.append(line).append("#_end_#");
}
return buffer.toString();
}
public void writeStrToFile(String str, String filePath, String charsetName)
throws Exception {
if (charsetName == null) {
charsetName = "utf-8";
}
OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(
filePath), charsetName);
out.write(str);
out.close();
}
}
测试文件为:
public class SimpleTest {
//方法一
public void fun() {
System.out.println("hello world");
}
/**
* 方法二
* @param args
*/
public static void mainTest(String[] args) {
System.out.println("another method");
}
//方法三
public static void Tmain(String[] args) {
System.out.println("another Method!");
}
/**
* 方法四
*/
public static void main() {
System.out.println("another Method!");
}
/**
* 方法五
* @param args
* @param len
*/
public static void main(String[] args, int len) {
System.out.println("another Method!");
}
/**
* 方法六
* @param args2
* @throws Exception
*/
/* public static void main(String... args2)throws Exception {
System.out.println("Main Method!");
for (int i = 0; i < 10; i++) {
if (i == 3) {
System.out.println("----------");
}
System.out.println(i);
}
System.out.println("another Method!");
}*/
/**
* 方法七
* @param args2
* @throws Exception
*/
public static void main(String... args2) throws Exception {
System.out.println("Main Method!");
String tmp="abcdefbachbad";
System.out.println(tmp.substring(0,3)+"----="+tmp.substring(3));
//tmp="/* */";
//tmp="/*\r\n *\r\n **/";
tmp=tmp.replaceAll("\\/\\*\\s*\\*\\/", "");
tmp=tmp.replaceAll("/\\*(\\s*\\*\\s*\\s*?)*\\*\\/", "");
System.out.println(tmp);
for (int i = 0; i < 10; i++) {
if (i == 3) {
System.out.println("----------");
}
System.out.println("---------------"+i);
}
System.out.println("another Method!");
}
/**
* 方法八
* @param args
*/
/*
* public static void main(String... args2)throws Exception {
* System.out.println("Main Method!"); for (int i = 0; i < 10; i++) { if (i
* == 3) { System.out.println("----------"); } System.out.println(i); }
* System.out.println("another Method!"); }
*/
/**
* 方法九
*/
public static void main4Test(String... args) {
System.out.println("another method");
}
/**
* 方法十
*/
public void fun2() {
System.out.println("hello world2");
}
/**
* 方法十一
*/
public void main5Test() {
System.out.println("another method");
}
}
处理结果为:
测试文件二:
public class SimpleTest {
//方法一
public void fun() {
System.out.println("hello world");
}
/**
* 方法二
* @param args
*/
public static void mainTest(String[] args) {
System.out.println("another method");
}
//方法三
public static void Tmain(String[] args) {
System.out.println("another Method!");
}
/**
* 方法六
* @param args2
* @throws Exception
*/
/* public static void main(String... args2)throws Exception {
System.out.println("Main Method!");
for (int i = 0; i < 10; i++) {
if (i == 3) {
System.out.println("----------");
}
System.out.println(i);
}
System.out.println("another Method!");
}*/
/**
* 方法四
*/
public static void main() {
System.out.println("another Method!");
}
/**
* 方法五
* @param args
* @param len
*/
public static void main(String[] args, int len) {
System.out.println("another Method!");
}
/**
* 方法七
* @param args2
* @throws Exception
*/
public static void main(String... args2) throws Exception {
System.out.println("Main Method!");
String tmp="abcdefbachbad";
System.out.println(tmp.substring(0,3)+"----="+tmp.substring(3));
//tmp="/* */";
//tmp="/*\r\n *\r\n **/";
tmp=tmp.replaceAll("\\/\\*\\s*\\*\\/", "");
tmp=tmp.replaceAll("/\\*(\\s*\\*\\s*\\s*?)*\\*\\/", "");
System.out.println(tmp);
for (int i = 0; i < 10; i++) {
if (i == 3) {
System.out.println("----------");
}
System.out.println("---------------"+i);
}
System.out.println("another Method!");
}
/**
* 方法九
*/
public static void main4Test(String... args) {
System.out.println("another method");
}
/**
* 方法十
*/
public void fun2() {
System.out.println("hello world2");
}
/**
* 方法八
* @param args
*/
/*
* public static void main(String... args2)throws Exception {
* System.out.println("Main Method!"); for (int i = 0; i < 10; i++) { if (i
* == 3) { System.out.println("----------"); } System.out.println(i); }
* System.out.println("another Method!"); }
*/
/**
* 方法十一
*/
public void main5Test() {
System.out.println("another method");
}
}
处理结果为:
测试文件三:
public class SimpleTest2 {
/**
* @param args
* @param len
*/
public static void main(String[] args, int len) {
System.out.println("another Method!");
}
/**
* 方法九
*/
public static void main4Test(String... args) {
System.out.println("another method");
}
/**
* 方法十
*/
public void fun2() {
System.out.println("hello world2");
}
}
处理结果为:
由于本人是采用匹配main其实位置截取字符串做的,主要缺点为:
如果main方法上面有注释,导致main方法去掉后,注释还在,如果main方法上面无注释:
public class SimpleTest {
//方法一
public void fun() {
System.out.println("hello world");
}
/**
* 方法二
* @param args
*/
public static void mainTest(String[] args) {
System.out.println("another method");
}
//方法三
public static void Tmain(String[] args) {
System.out.println("another Method!");
}
/**
* 方法四
*/
public static void main() {
System.out.println("another Method!");
}
/**
* 方法五
* @param args
* @param len
*/
public static void main(String[] args, int len) {
System.out.println("another Method!");
}
/* public static void main(String... args2)throws Exception {
System.out.println("Main Method!");
for (int i = 0; i < 10; i++) {
if (i == 3) {
System.out.println("----------");
}
System.out.println(i);
}
System.out.println("another Method!");
}*/
public static void main(String... args2) throws Exception {
System.out.println("Main Method!");
String tmp="abcdefbachbad";
System.out.println(tmp.substring(0,3)+"----="+tmp.substring(3));
//tmp="/* */";
//tmp="/*\r\n *\r\n **/";
tmp=tmp.replaceAll("\\/\\*\\s*\\*\\/", "");
tmp=tmp.replaceAll("/\\*(\\s*\\*\\s*\\s*?)*\\*\\/", "");
System.out.println(tmp);
for (int i = 0; i < 10; i++) {
if (i == 3) {
System.out.println("----------");
}
System.out.println("---------------"+i);
}
System.out.println("another Method!");
}
/*
* public static void main(String... args2)throws Exception {
* System.out.println("Main Method!"); for (int i = 0; i < 10; i++) { if (i
* == 3) { System.out.println("----------"); } System.out.println(i); }
* System.out.println("another Method!"); }
*/
/**
* 方法九
*/
public static void main4Test(String... args) {
System.out.println("another method");
}
/**
* 方法十
*/
public void fun2() {
System.out.println("hello world2");
}
/**
* 方法十一
*/
public void main5Test() {
System.out.println("another method");
}
}
测试结果为:
可见处理结果很正确,残留的注释本人怕误删,所以没做进一步处理。
如果你有更好的方法,欢迎留言,谢谢。
本文系原创,转载请注明出处,谢谢。