怎么准确匹配java代码文件中的“块注释(/* */)”,有人有经验吗?所谓以下的这种:/\*.*?\*/,实际上是不行的。因为当字符串中包含/* ... */这样的句式时,也被认为了是注释。还有注释的格式可以是多变的,比如:/* /* */,这也是注释。不能否认个人的注释习惯不同。还有其他的问题,所以,我想了半天也没想出很好的匹配方法。大家给些建议。 谢谢!
解决方案 »
- 我是新手,小写变大写,大写变小写,数字不变,其他的变*号,求指教,哪里出问题了...
- 问一个概念问题
- java如何将一个规则的txt文档转换成excel格式文件?
- 有谁用JAVA操作过PDW文件?
- 对clazz.getResource("")的困惑,请朋友们解惑,谢谢!
- javamail 发送邮件
- java GUI 中如何嵌入网页,并跟网页交互
- 关于ImageIcon的问题,动态加载图形
- 内部类的作用??
- 如何提取ArrayList里的串数组的元素??
- 一个小问题~帮帮忙谢谢
- jdk到底是个什么许可协议呀?平时用jdk也不要钱呀,下载的jdk中有原文件呀。怎么现在老在说sun开放java原代码的事呀??
1、首先区分注释和字符串的问题,看/* */格式之前是否出现"。
2、至于说多种注释的话,逐一匹配就是了,如果出现在字符串中的情况,同上。
谢谢关注!
关于1:我认为至少有一下情况不适合,比如:
--------------------------------------------
String str = "abcd";
/*
*
*/
--------------------------------------------
要是按照法1来匹配的话,就匹配不上。关于2:可能会过于繁琐,要是能有种比较统一的方法来就比较好了,欢迎大家各显其能!!
final int start=0;
final int one=1;
final int two=2;
final int three=3;
final int finalState=4;
final int five=5;
final int six=6;
public List getCommentList(String s){
ArrayList ret=new ArrayList();
int begin=-1;
int curState=start;
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
switch(curState){
case(start):
if(c=='/'){
begin=i;
curState=one;
}
else if(c=='"'){
//识别字符出
curState=5;
}
break;
case(one):
if(c=='*') curState=two;
else curState=start;
break;
case(two):
if(c=='*') curState=three;
break;
case(three):
if(c=='/'){
curState=finalState;
//eat
ret.add(s.substring(begin,i+1));
//reset;
curState=start;
begin=-1;
}
else curState=two;
break;
case(five):
if(c=='"') curState=start;
else if(c=='\\')curState=six;
break;
case(six):
curState=five;
break;
}
}
return ret;
}
}
这位老大提供了一种思路,呵呵,非常感谢,真不知道编译器是怎么识别的,那么准确,呵呵
http://www.regexlab.com/highlight/