Java编程题/注释比例

【问题描述】

一个好的程序要有一定比例的注释。编写一个程序统计一个C源文件中注释所占的百分比。百分比计算公式为:程序注释中字符总数(/**/除外的所有字符)除以程序文件中总字符数(程序文件中的所有字符)。

注:只简单考虑/*...*/的注释,而且要考虑注释跨行的情况,不要考虑其它复杂情况。

文件中只计算字符之间的空格,字符之外的空格不计入总空格数

【输入形式】

从当前目录下的filein.c源程序文件获得输入。

【输出形式】

向控制台输出注释所占百分比,百分数无小数(小数部分直接截掉,不要四舍五入),后跟百分号%。

【样例输入】

假设filein.c的内容为:

void main()
{
    FILE * in;
    /*Open the file*/
    if((in=fopen("in.txt","r"))==NULL)
    {
        printf("Can’t open in.txt!");
        return;
    }
    /*Close the file,
    and return.*/
    fclose(in);
}

样例输出】

22%
【样例说明】

filein.c文件的总字符数为179,注释中的字符数为41,则注释所占百分比为22%。

【样例代码】

package test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.io.UnsupportedEncodingException;

public class AnnotationScale {
	static BufferedReader br;

	public static void main(String[] args) throws UnsupportedEncodingException {
		PrintStream ps = new PrintStream(System.out, true, "UTF-8");
		File f = new File("filein.c");
		StringBuffer content = new StringBuffer();
		try {
			FileReader fr = new FileReader(f);
			br = new BufferedReader(fr);
			String line;
			int left = 0;//左花括号出现的次数
			int right = 0;//右花括号出现的次数
			try {
				line = br.readLine(); //读取第一行
				while (line != null) {
					if (line.indexOf("{") != -1) {
						left++;
					}
					if (line.indexOf("}") != -1) {
						right++;
					}
					if (left != right) { //当左右的花括号不匹配时候,表示在花括号内,那么前面这一行的字符串前面应该空两格
						line = "  " + line.trim();
					} else {
						line = line.trim();
					}
					content.append(line);
					line = br.readLine();
				}
				br.close();
				fr.close();
			} catch (IOException e) {
				ps.println("文件读取失败");
			}
		} catch (FileNotFoundException e) {
			ps.println("文件不存在");
		}
		StringBuffer allContent = new StringBuffer(content);// 定义变量保留原字符总串
		StringBuffer annotationContent = new StringBuffer();
		while (content.indexOf("/*") != -1 && content.indexOf("*/") != -1) {
			annotationContent.append(content.substring(content.indexOf("/*") + 2, content.indexOf("*/")));
			content.delete(content.indexOf("/*"), content.indexOf("*/") + 2);// 加好就删掉出这个注释
		}
//		ps.println(allContent);
//		ps.println("总字符长度:" + allContent.length());// 总字符长度
//		ps.println(annotationContent);
//		ps.println("注释的字符串长度:" + annotationContent.length());// 注释的字符串串在一起的长度
		int scale = annotationContent.length() * 100 / allContent.length();// 字符占的百分比
//		ps.println("注释比率:" + scale + "%");
		ps.println(scale + "%");
	}
}

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自律最差的编程狗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值