Java应用之删除Java文件的Main方法

      先说下为什么要删除main方法,由于部分同事在本地写了main方法测试代码,提交代码时候忘记把main方法删除,导致代码不规范,所以需要有一个方法能删除java文件中的main方法。

      首先,常用的main方法写法有2种,那种变态的使用16进制写的不算。

      main方法的一般写法:

     

 public static void main(String[] args) {
	      System.out.println("Main Method");
	 }

    另一种使用可变参数的写法:  

 

   

 public static void main(String... args) {
	      System.out.println("Main Method");
	  }

    一般人的想法是使用main(String[] args)或者main(String... args)正则匹配,但是java中可以把方法名写到不同的行上的。

   

public static void main (
			String...  args) {
		System.out.println("Main Method!");
	}

   String...后面的那个参数可以随便写不同的名字:

  

public static void main (
			String...  args2) {
		System.out.println("Main Method!");
	}

    应该使用main(String... [a-zA-Z0-9_])这类的匹配,匹配前还得去除多余的空格。

    下面介绍我写的去除main方法。

     我的思路是得到main函数的起始范围,去掉就OK了。同时也考虑了这种情况:

    

public static void main(String[]args,int len)
	{
		System.out.println("another Method!");
	}

    详情可以看代码,我就不一一解释了,代码写的不是很好,请见谅。

   

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 publicStart = -1, mainStart = -1;
		int checkStart = -1;
		String tmp = null, tmp2 = null;
		mainStart = content.lastIndexOf("main");
		String tmpContent = new String(content);
		// 得到真正的main方法
		while ((mainStart = tmpContent.lastIndexOf("main")) != -1) {
			tmp2 = new String(tmpContent.substring(mainStart));
			checkStart = tmp2.indexOf(")");
			tmp2 = new String(tmpContent.substring(mainStart - 1, mainStart
					+ checkStart + 1));
			tmp2 = tmp2.replaceAll("#_end_#", "\n");
			tmp2 = tmp2.replaceAll("\\n", "");
			tmp2 = tmp2.replaceAll("\\s+", "");
			if (tmp2.startsWith("main(String") && (tmp2.indexOf(",") == -1)) {
				break;
			}
			tmpContent = new String(tmpContent.substring(0, mainStart));
		}
		if (mainStart != -1) {
			tmp = new String(content.substring(0, mainStart));
			// 得到main方法的开始位置
			publicStart = tmp.lastIndexOf("public");
		}
		if (publicStart != -1) {
			tmp = new String(content.substring(mainStart));
		}
		if (tmp == null) {
			// 去掉多余空白行
			content = content.replaceAll("#_end_#", "\r\n");
			content = content.replaceAll("\\s{2,}\\r\\n", "\r\n");
			return content;
		}
		// 得到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));
		content = null;
		content = contentBuffer.toString();
		// 去掉多余空白行
		content = content.replaceAll("#_end_#", "\r\n");
		content = content.replaceAll("\\s{2,}\\r\\n", "\r\n");
		return content;
	}

	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");
	}

	public static void mainTest(String[] args) {
		System.out.println("another method");
	}

	public static void Tmain(String[] args) {
		System.out.println("another Method!");
	}
	
	private static void main()
	{
		System.out.println("another Method!");
	}
	
	private static void main(String[]args,int len)
	{
		System.out.println("another Method!");
	}
	
	public static void main (
			String...  args2) {
		System.out.println("Main 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");
	}

	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!");
	}
	
	public static void main(String[]args,int len)
	{
		System.out.println("another Method!");
	}
	
	public static void main (
			String...  args2) {
		System.out.println("Main 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");
	}

}

    处理结果为:

   

 

    如果没有main函数,处理结果为:

   

    有不同方法的,请留言,谢谢,我知道我这种方法是最笨的,欢迎各位指教。

    本文系原创,转载请注明出处,谢谢。

    全文完。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值