参考:https://segmentfault.com/q/1010000012636380/a-1020000012640905

题目:统计文件中//和/* */注释的个数,双引号中的不算

import java.util.ArrayList;
import java.util.Scanner; public class NoteCounter { public static void main(String[] args) throws Exception {
// TODO 自动生成的方法存根
Scanner in=new Scanner(System.in);
ArrayList<String> ve=new ArrayList<String>();
while(in.hasNext()){
String temp=in.nextLine();
ve.add(temp);
if(temp.equals("}"))break;
}
System.out.println(ve);
System.out.println(operateNote(ve)[0]+" "+operateNote(ve)[1]);
}
public static int[] operateNote(ArrayList<String> list) throws Exception{ String s = null;
int countNote=0;
int charInNote=0;
for(int j=0;j<list.size();j++) {
s=list.get(j);
int note1=s.indexOf("/*");
int note2=s.indexOf("//");
int note3=s.indexOf("*/");
//int note4=s.indexOf("\""); String dm="\"(.*)\"";//双引号
String sm="\'(.*)\'";//单引号 if(note1!=-1&&note3==-1) {//多行注释
countNote++;
String ttt=list.get(j);
list.set(j, ttt.substring(0, note1));
charInNote+=s.substring(note1).length()+1;//+1是包括换行符 s=list.get(++j);
while((note3=s.indexOf("*/"))==-1) {
if((note2=s.indexOf("//"))!=-1) {
countNote++;
}
list.remove(j); charInNote+=s.length()+1;
if(j<list.size()-1) {
s=list.get(++j);
}else {
break;
}
}
list.remove(j);
charInNote+=s.length(); }else if(note2!=-1) {// "//"类的单行注释
countNote++;
list.set(j, s.substring(0,note2));
charInNote+=s.substring(note2).length()+1;
}else if(note1!=-1&&note3!=-1) {//单行注释
countNote++; String m1=s.substring(0, note1);
String m2=s.substring(note3+2);
String m3=m1+m2;
charInNote+=s.substring(note1, note3+2).length();
list.set(j, m3);
}else {//删除输出语句
String rp=list.get(j);
rp=rp.replaceAll(dm, "");
list.set(j, rp);
} }
return new int[]{countNote,charInNote}; } }

测试数据:

// line comment //
/* block comment */ /* block comment2 */
int main(){
char[] s="/* string */";
return ;
}

输出结果:

3(注释个数)   20(注释中字符的个数)

package toutiao;
import java.util.ArrayList;import java.util.Scanner;
public class NoteCounter {
public static void main(String[] args) throws Exception {// TODO 自动生成的方法存根Scanner in=new Scanner(System.in);        ArrayList<String> ve=new ArrayList<String>();        while(in.hasNext()){        String temp=in.nextLine();        ve.add(temp);        if(temp.equals("}"))break;        }        System.out.println(ve);        System.out.println(operateNote(ve)[0]+"  "+operateNote(ve)[1]);}public static int[] operateNote(ArrayList<String> list) throws Exception{               String s = null;       int countNote=0;       int charInNote=0;       for(int j=0;j<list.size();j++) {           s=list.get(j);           int note1=s.indexOf("/*");           int note2=s.indexOf("//");           int note3=s.indexOf("*/");           //int note4=s.indexOf("\"");
           String dm="\"(.*)\"";//双引号           String sm="\'(.*)\'";//单引号                                      if(note1!=-1&&note3==-1) {//多行注释              countNote++;              String ttt=list.get(j);              list.set(j, ttt.substring(0, note1));              charInNote+=s.substring(note1).length()+1;//+1是包括换行符                                              s=list.get(++j);              while((note3=s.indexOf("*/"))==-1) {                    if((note2=s.indexOf("//"))!=-1) {                        countNote++;                    }                    list.remove(j);                                      charInNote+=s.length()+1;                  if(j<list.size()-1) {                      s=list.get(++j);                  }else {                      break;                  }              }              list.remove(j);              charInNote+=s.length();                        }else if(note2!=-1) {// "//"类的单行注释              countNote++;              list.set(j, s.substring(0,note2));              charInNote+=s.substring(note2).length()+1;          }else if(note1!=-1&&note3!=-1) {//单行注释              countNote++;
              String m1=s.substring(0, note1);              String m2=s.substring(note3+2);              String m3=m1+m2;              charInNote+=s.substring(note1, note3+2).length();              list.set(j, m3);          }else {//删除输出语句              String rp=list.get(j);              rp=rp.replaceAll(dm, "");              list.set(j, rp);          }                 }       return new int[]{countNote,charInNote};
   }
}

java 统计文件注释个数的更多相关文章

  1. Java统计文件数量

    Java统计文件数量 package com.vfsd; import java.io.File; import java.io.IOException; /********************* ...

  2. Java的文件注释

    以下内容引用自http://wiki.jikexueyuan.com/project/java/documentation.html: Java语言支持三种注释形式: 注释 描述 /*text*/ 编 ...

  3. python 统计文件的个数

    import os path = r'F:\1back\picture' #获取当前路径 count = 0 for root,dirs,files in os.walk(path): #遍历统计 i ...

  4. Java统计文件中字母个数

    import java.text.DecimalFormat; import java.io.File; import java.io.FileReader; import java.io.Buffe ...

  5. java统计文件字母大小写的数量练习

    import java.io.*; import java.lang.*; public class WordStatistic { private BufferedReader br; privat ...

  6. JAVA统计中文的个数

    尝试了一下 不错~ /** * 获取字符串的长度,中文占一个字符,英文数字占半个字符 * * @param value 指定的字符串 * @return 字符串的长度 */ public static ...

  7. 原创:C语言打开、下载、删除网页,统计网页字符个数

    本程序由本人在华夏联盟的ID闪电笨笨原创,首发地址:http://bbs.hx95.com/ 写此程序希望可以可以激发新手学习C语言的积极性! C语言代码实现功能如下:            1.实现 ...

  8. python (9)统计文件夹下的所有文件夹数目、统计文件夹下所有文件数目、遍历文件夹下的文件

    命令:os 用到的:os.walk   os.listdir 写的爬虫爬的数据,但是又不知道进行到哪了,于是就写了个脚本来统计文件的个数 #统计 /home/dir/ 下的文件夹个数 import o ...

  9. Linux统计文件夹下文件信息

    统计当前文件夹里面有多少文件,即统计文件个数 ls -l |grep "^-"|wc -l 统计当前文件夹里面有多少文件夹,即统计文件夹个数 ls -l |grep "^ ...

随机推荐

  1. Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结

    Atitit.angular.js 使用最佳实践 原理与常见问题解决与列表显示案例 attilax总结 1. 本文范围 1 2. Angular的优点 1 2.1. 双向数据绑定 1 2.2. dsl ...

  2. PHP系统学习3 正则

    正则 ^shop 标示匹配与shop开头的字符串 shop$用来匹配与shop结尾的字符串 ^shop$只匹配shop [a-z]匹配所有小写字母 [A-Z]匹配所有大写字母 [a-zA-Z]匹配所有 ...

  3. MVC & Entity Framework(1)- 开发环境

    一直都有接触asp.net mvc,希望自己借此次机会把Blog搭起来的同时能够更深入地学习相关知识. ①新建 打开VS2012,新建ASP.Net MVC 4项目,接着选择“空”模板(因为不想用自带 ...

  4. Post+Get方式接口测试代码编写

    详细代码如下 package testproject; import java.io.BufferedReader; import java.io.IOException; import java.i ...

  5. 小案例:struts1.3利用nested标签使用POJO

    其中的关键就是这个POJO是你自己去new一个,struts是不会帮你创建的!参考http://luohua.iteye.com/blog/39976 表单页 <%@ page language ...

  6. 资源文件properties的存放路径

    参考这篇博客:http://lavasoft.blog.51cto.com/62575/184605 目前看来,大多数的做法是这样的: 比如a.properties需要被com.xxx.yyy这个包中 ...

  7. redis数据类型[string 、list 、 set 、sorted set 、hash]

    1. Keys  redis本质上一个key-value db,所以我们首先来看看他的key.  首先key也是字符串类型,但是key中不能包括边界字符:由于key不是binary safe的字符串, ...

  8. java+lucene中文分词,来看看百度究竟是怎么找到你想要的(十分重要,楼主幸苦之作)

    我想只要是学过数据库的孩纸,不管是mysql,还是sqlsever,一提到查找,本能的想到的便是like关键字,其实去转盘网(分类模式)之前也是采用这种算法,但我可以告诉大家一个很不幸的事情,like ...

  9. STM32F10x_RTC日历

    Ⅰ.概述 接着上一篇文章来讲述关于RTC的计数功能,我们以实例RTC日历(读写年.月.日.星期.时.分.秒)来讲述该章节. STM32F1系列芯片的RTC功能和其他系列(F0.F2.F4等)相比来说, ...

  10. android动画效果(转载)

    一.动画基本类型: 如下表所示,Android的动画由四种类型组成,即可在xml中定义,也可在代码中定义,如下所示: XML CODE 渐变透明度动画效果 alpha AlphaAnimation 渐 ...