如何过滤掉Java多行注释呢?
比如"/*aabbcc*/ */aa" 过滤掉注释之后应该是:" */aa"
先看测试:
@Test public void ttest_deleteJavaComment(){ String input="/*aabbcc*/ */aa"; Assert.assertEquals(" */aa", ValueWidget.deleteJavaComment(input)); System.out.println(ValueWidget.deleteJavaComment(input)); input="/*aabbcc* */aa"; Assert.assertEquals("aa", ValueWidget.deleteJavaComment(input)); input="/*aabbcc/ */aa"; Assert.assertEquals("aa", ValueWidget.deleteJavaComment(input)); input="/*aabbcc/ */aa/**/c"; Assert.assertEquals("aac", ValueWidget.deleteJavaComment(input)); input="/*aabb"+SystemHWUtil.CRLF+"cc/ */aa"; System.out.println(input); Assert.assertEquals("aa", ValueWidget.deleteJavaComment(input)); }
测试通过.
看看deleteJavaComment 是如何实现的?
/*** * 删除Java 块注释 */ public static String deleteJavaComment(String input){ if(ValueWidget.isNullOrEmpty(input)){ return input; } String regex="/\\*"+otherwise22("*/")+"\\*/"; // System.out.println(regex); return input.replaceAll(regex, ""); }
依赖的方法:
/*** * * @param a * @param aa * @param index : 初始值为0 */ private static List<StringBuffer> cc(String[][] aa,int index,List<StringBuffer> list,boolean isDealRegex){ if(index>=aa.length){//说明已经遍历完成 return list;//并不是每次循环都会执行,最后才会执行此语句. } String cc[]=aa[index]; int length=cc.length; List<StringBuffer> listNew=new ArrayList<StringBuffer>(); if(list==null||list.size()==0){//首次循环 for(int i=0;i<length;i++){//必须保证顺序,所以不能使用 foreach if(isDealRegex && cc[i].equals("*")){ cc[i]="\\*"; } if(isDealRegex){ listNew.add(new StringBuffer(cc[i]+"?")); }else{ listNew.add(new StringBuffer(cc[i])); } } }else{ for(int i=0;i<length;i++){//必须保证顺序,所以不能使用 foreach for(int j=0;j<list.size();j++){//必须保证顺序,所以不能使用 foreach StringBuffer sb=list.get(j); StringBuffer sb2=new StringBuffer(sb); if(isDealRegex && cc[i].equals("*")){ cc[i]="\\*"; } if(isDealRegex ){ sb2.append(cc[i]+"?"); }else{ sb2.append(cc[i]); } listNew.add(sb2); } } } List<StringBuffer> list33=cc(aa, ++index, listNew,isDealRegex); if(!ValueWidget.isNullOrEmpty(list33)){ return list33; } return null; } /*** * 组合 * @param aa * @return */ public static List<StringBuffer>assemble(String[][] aa,boolean isDealRegex){ return cc(aa, 0, null,isDealRegex); } /*** * 不包含 * @param regex * @return */ public static String otherwise22(String regex){ int length=regex.length();//共有length * length种情况 String[][] arr2=new String[length][]; for(int i=0;i<length;i++){ String[] arr3=new String[2]; arr3[0]=String.valueOf(regex.charAt(i)); // if(arr3[0].equals("*")){ // arr3[0]="\\*"; // } arr3[1]="[^"+arr3[0]+"]"; // System.out.println(arr3[0]+" "+arr3[1]); arr2[i]=arr3; } // String[]result=new String[2^3]; // for(int i=0;i<length;i++){ // result[i]=arr2[i][0]; // } // \u4E00-\u9FA5 是为了匹配汉字 String normal="[\\w\u4E00-\u9FA5\\s\"']*?"; List<StringBuffer> list33=assemble(arr2,true); int length22=list33.size(); StringBuffer sbu=new StringBuffer("("); for(int i=1;i<length22;i++){ sbu.append(normal).append(list33.get(i)).append(normal); if(i!=length22-1){ sbu.append("|"); } } sbu.append(")"); // System.out.println(list33); return sbu.toString(); }
源代码见附件中的io0007-find_progess\src\main\java\com\string\widget\util\ValueWidget.java
注意:
(1)* 在正则表达式中需要转义,因为*表示0个或多个;
(2)\w 表示所有单词字符,如果打印出来是\\w,则不对,说明在程序中多了两个斜杠
参考:http://hw1287789687.iteye.com/blog/2149492
相关推荐
聪哥创作的一款批量保留路径清理代码注释的工具,目前兼容大...3.增加ruby语言的多行注释清理的能力 2022年11月25日更新日志: 1.修复了行内//注释无法清除的bug 2.增加了默认文件类型内容。 3.提升软件的清理性能。
在Java中,单行注释以"//"开始,多行注释以"/**/"包裹,而在类、方法或变量声明前的"/*...*/"形式的注释也被视为多行注释。代码统计工具需要识别这些模式,并将它们分类。 `CodeCounter.java`很可能包含了读取文件...
Java中的注释主要有单行注释(//)和多行注释(/*...*/)。可以使用正则表达式来匹配这些注释模式。 5. **计数**:根据行的类型,增加相应的计数器。例如,可以定义三个计数器:总行数、代码行数和注释行数。 6. *...
Java的注释方式类似,但多行注释还可以使用`/**...*/`,用于生成Javadoc。 10. 自动补全与快捷键: 在C#中,`Ctrl+Shift+F`用于格式化全部代码,`Ctrl+J`用于自动补全,`cw+Tab+Tab`可以快速输入`console.WriteLine...
例如,在Java中,单行注释以"//"开始,多行注释则以"/*"开始并以"*/"结束。此外,工具可能还会识别三引号字符串("""..."""/'''...''''),它们在某些情况下用于创建多行字符串,但也可以用于添加文档字符串。 在...
当然,对于不同编程语言,代码行的定义可能不同,例如C++或Java中多行注释(/* ... */)、XML、HTML等,可能需要更复杂的解析逻辑。 此外,为了统计特定格式的文件,我们可以在`countLines()`方法中添加条件判断,...
Java注释包括单行注释(`//`)和多行注释(`/* */`)。我们可以通过正则表达式匹配这些模式,过滤掉它们。剩下的行被视为代码行。 4. **结果统计**:统计每个文件的代码行数,并将其累加到总行数中。可能还需要记录...
\\*/`匹配多行注释,`//.*?$`匹配单行注释,并排除空白行。 在统计过程中,程序可能还需要考虑嵌套结构,如方法或类定义内的代码行。为了处理这种情况,可以使用语法解析库,如ANTLR或JavaCC,它们能解析Java源代码...
Java源码中的注释分为单行注释(//)和多行注释(/*...*/),工具会通过特定的规则过滤掉这些非执行代码。 4. **结果输出**:统计完成后,工具会将结果以报表的形式输出,可能包括总代码行、注释行、空行等信息。在...
- **注释**:分为单行注释(`//`)、多行注释(`/* */`)和文档注释(`/** */`)三种形式。 - **标识符**:用来命名类名、变量名等,遵循一定的命名规则。 - **关键字**:如`abstract`、`continue`、`for`等,用于定义Java...
3. Java的注释:讲解了Java代码中注释的种类,包括单行注释、多行注释和文档注释。 **Java变量与数据类型** 1. Java变量:讲解变量的定义、命名规则以及作用域。 2. 进制转换基础:涉及到二进制、八进制和十六进制...
此外,词法分析器还需要处理注释,包括单行注释(以`//`开始)和多行注释(以`/*`和`*/`包围)。 在这个实现中,词法分析器能够正确地识别和过滤掉注释,确保后续的解析阶段只处理有效代码。对于Java,词法分析器还...
Java中的注释有单行注释(//)、多行注释(/*...*/)和文档注释(/**...*/,用于生成API文档)。 2. **数据类型**:Java分为两种数据类型:基本类型(如int、char、boolean)和引用类型(类、接口、数组)。基本...
Java doc注释通常以`/**`开头,以`*/`结尾,中间可以包含多行描述、参数、返回值、异常、作者等信息。例如: ```java /** * 这是一个示例方法,用于计算两个整数的和。 * * @param num1 第一个整数 * @param ...
类、方法和复杂的逻辑应有相应的注释说明,单行注释通常使用//,多行注释使用/*...*/。 二、异常处理 1. 异常分类:根据异常的可恢复性,将其分为检查异常和运行时异常。检查异常需要显式捕获,运行时异常则由代码...
对于C#、Java、C++和.NET文件,我们需要注意它们的语法特点,如C#和Java中的`//`单行注释和`/*...*/`多行注释,以及C++中的`//`和`/*...*/`。为了过滤掉这些注释,我们可以使用正则表达式或者自定义的解析器逐行扫描...
1. **JavaDOC注释**:JavaDOC注释是一种特殊格式的多行注释,用于生成API文档。它通常应用于类、方法和接口之上,以便为其他开发人员提供关于代码功能的详细描述。 2. **包的作用**:包在Java中主要用于组织类,...
- **注释类型**:Java中有三种注释方式:单行注释(`//`)、多行注释(`/* */`)和文档注释(`/** */`)。文档注释可以被`javadoc`工具提取并生成API文档。 #### 七、命名约定 - **类名**:首字母大写,多个单词...
阿里巴巴手册建议使用Javadoc来注释公共API,用单行或多行注释来解释复杂的逻辑或特殊情况。注释应简洁明了,避免重复代码中的显而易见的信息。 4. **控制语句**:手册对if、for、while等控制语句的使用进行了规定...